MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Filtern Sie nach Land und suchen Sie mit Mongoose in Mongodb im freien Text

Zunächst einmal hoffe ich, dass Sie das wissen, um $text auszuführen basierten Abfragen benötigen Sie einen textbasierten Index auf diesem bestimmten Feld.

Zweitens scheinen Sie Callbacks und Promises zu verwechseln -

Wie ich Ihre query() sehen kann -Funktion gibt immer noch ein Promise zurück, wenn Sie query() aufrufen Funktion, die Sie den Rückruf erwarten. Versprechungen werden sofort an Sie zurückgesendet und Sie müssen sie dann lösen.

Ihr Code sollte so aussehen -

dbHelper.query(mongoose.model('events'), {$text: {$search: "Ade"},'place.location.country': "Australia"})
.then(function(result)){
    // you have your data here
}
.catch(function(err)){
    // an error occured
}

Lesen Sie mehr über Versprechen hier .

Ein weiterer kleiner Fehler, den ich bemerken kann, ist in query() Methode. Die if statement verwendet keine geschweiften Klammern und daher nur die allernächste Anweisung nach der if statement wird unter if ausgeführt Klausel. Die zweite Anweisung nach dem if wird immer ausgeführt -

Also,

if(error)
    console.log(error);
// always executed
reject(error);
resolve(data);

sollte -

sein
if(error){
    console.log(error);
    reject(error);
}
resolve(data);

Ich bin mir immer noch nicht sicher, ob all dies in der Lage wäre, Ihren Code zum Laufen zu bringen, da ich hier nicht das ganze Bild sehen kann. Ich empfehle IMHO, dass Sie etwas mehr Zeit investieren, um die Grundlagen von Javascript und MongoDB zu behandeln. Wird Ihnen helfen, viel Zeit zu sparen. Und für diese Angelegenheit die offiziellen Dokumente von MongoDB sind wirklich gut.