MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Filtra per paese e cerca il testo libero mongodb usando mongoose

Prima di tutto spero che tu sappia che per eseguire $text query basate è necessario disporre di un indice basato su testo su quel particolare campo.

In secondo luogo, sembri confondere i richiami e le promesse -

Come posso vedere la tua query() la funzione restituisce ancora una promessa quando chiami query() funzione che ti aspetti la richiamata. Le promesse ti vengono restituite immediatamente e poi devi risolverle.

Il tuo codice dovrebbe assomigliare a questo -

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
}

Ulteriori informazioni sulle Promesse qui .

Un altro bug minore che posso notare è nel query() metodo. L'if statement non usa le parentesi graffe e di conseguenza solo l'istruzione successiva all'if statement verrà eseguito sotto il if clausola. La seconda istruzione dopo if verrà sempre eseguito -

Allora,

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

dovrebbe essere -

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

Non sono ancora sicuro che tutti questi sarebbero in grado di far funzionare il tuo codice poiché non riesco a vedere l'intera immagine qui. Ti consiglio di investire un po' più di tempo coprendo le basi di javascript e MongoDB. Ti aiuterà a risparmiare un sacco di tempo. E del resto i documenti ufficiali di MongoDB sono davvero buoni.