sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur gör man flera textsökningar med $text query och $or i mongodb / mongoose?

Det faktiska felet tyder på att din mongodb är en version mindre än 2.6 (så ingen textsökning på det sättet). Men du kan inte göra det ändå av två skäl.

  1. En $or uttryck kan bara ha ett speciellt indexuttryck, som antingen är "text" eller "geospatial" i argumenten.

  2. Du förväntar dig textsökningar på "två" olika fält och du kan bara ha ett textindex per samling. Det enda indexet kan dock spridas över flera fält i dokumentet. Men du kan inte fråga olika söktermer för olika fält.

Dokumentation citat :

Och det ska också stå "Du kan inte använda $or med en $text uttryck eller $near operatör där någon av dem används i mer än ett tillstånd." Men den lilla informationen saknas, men du kan fortfarande inte göra det.

Din syntax är vanligtvis inte korrekt, men även med rätt syntax i en version av MongoDB som stöds skulle du få ett felmeddelande när du försöker använda $or så här:

Error: error: {
    "$err" : "Can't canonicalize query: BadValue Too many text expressions",
    "code" : 17287
}

Så för att lösa detta behöver du:

  1. Att ha en MongoDB-serverversion av 2.6 eller senare som stöder $text syntax (eller leva med kommandoformer)

  2. Att leva med att indexera över flera fält och använda ett enda index.

  3. Att köra "separata frågor" istället för dina "eller"-villkor och "kombinera" resultaten i ditt klient-API-gränssnitt.

Det är det enda sättet du får "eller"-villkor som detta med MongoDB-textsökning.



  1. Mongoose findOne-metoden hämtar ett giltigt dokument med saknat _id

  2. MongoDB vs CouchDB (Hastighetsoptimering)

  3. Hur tar man bort dokument efter fråga effektivt i mongo?

  4. returnera endast en enskild egenskap _id