sql >> Databasteknik >  >> NoSQL >> MongoDB

Filtrera efter land och fritextsök mongodb med mongoose

Först och främst hoppas jag att du vet det för att utföra $text baserade frågor du behöver för att ha ett textbaserat index på just det fältet.

För det andra verkar du blanda ihop återuppringningar och löften -

Som jag kan se din query() Funktionen returnerar fortfarande ett löfte när du anropar query() funktion du förväntar dig återuppringningen. Löften returneras omedelbart till dig och sedan måste du lösa dem.

Din kod bör se ut så här -

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
}

Läs mer om löften här .

En annan mindre bugg som jag kan lägga märke till är i query() metod. if statement använder inte lockigt klammerparentes och som ett resultat endast nästa sats efter if statement kommer att köras under if klausul. Den andra satsen efter if kommer alltid att köras -

Så,

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

ska vara -

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

Jag är fortfarande inte säker på att alla dessa skulle kunna få din kod att fungera eftersom jag inte kan se hela bilden här. Jag rekommenderar IMHO att du investerar lite mer tid i att täcka JavaScript och MongoDB grunderna. Kommer att hjälpa dig att spara mycket tid. Och för den delen MongoDB:s officiella dokument är riktigt bra.




  1. MongoDB $toLong

  2. Hur man säkerhetskopierar och återställer Mongodb-databasen

  3. MongoDB-datamodellering:några nackdelar med att använda massor av databaser?

  4. Uppdatering av poster i MongoDB genom pymongo leder till radering av de flesta av dem