MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Filtrer par pays et rechercher en texte libre mongodb en utilisant mongoose

Tout d'abord, j'espère que vous savez que pour effectuer $text requêtes basées sur vous devez avoir un index basé sur le texte sur ce champ particulier.

Deuxièmement, vous semblez confondre rappels et promesses -

Comme je peux voir votre query() la fonction renvoie toujours une promesse lorsque vous appelez le query() fonction que vous attendez le rappel. Les promesses vous sont immédiatement retournées et vous devez ensuite les résoudre.

Votre code devrait ressembler à ceci -

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
}

En savoir plus sur les Promesses ici .

Un autre bogue mineur que je peux remarquer est dans le query() méthode. L'if statement n'utilise pas d'accolades et par conséquent uniquement la toute prochaine instruction après l'if statement sera exécuté sous le if clause. La deuxième instruction après le if sera toujours exécuté -

Alors,

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

devrait être -

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

Je ne suis toujours pas sûr que tout cela puisse faire fonctionner votre code car je ne peux pas voir l'image entière ici. Je vous recommande à mon humble avis d'investir un peu plus de temps sur les bases de javascript et de MongoDB. Vous aidera à gagner beaucoup de temps. Et d'ailleurs la documentation officielle de MongoDB sont vraiment bons.