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.
-
En
$or
uttryck kan bara ha ett speciellt indexuttryck, som antingen är "text" eller "geospatial" i argumenten. -
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:
-
Att ha en MongoDB-serverversion av 2.6 eller senare som stöder
$text
syntax (eller leva med kommandoformer) -
Att leva med att indexera över flera fält och använda ett enda index.
-
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.