Die feitelijke fout suggereert dat je mongodb een versie is die lager is dan 2.6 (dus niet op die manier naar tekst zoeken). Maar dat kun je om twee redenen toch niet doen.
-
Een
$or
uitdrukking kan slechts één . hebben speciale indexuitdrukking, ofwel "tekst" of "geospatiaal" in de argumenten. -
U verwacht tekstzoekopdrachten op "twee" verschillende velden en u kunt er slechts één . hebben tekstindex per collectie. Die ene index kan echter over meerdere velden in het document worden verspreid. Maar u kunt geen verschillende zoektermen vragen voor verschillende velden.
Documentatie citaat :
En er moet ook "Je kunt $or
. niet gebruiken met een $text
uitdrukking of de $near
operator waarbij beide in meer dan één toestand worden gebruikt." Maar dat kleine stukje informatie ontbreekt, maar je kunt het nog steeds niet doen.
Uw syntaxis is over het algemeen niet correct, maar zelfs met de juiste syntaxis in een ondersteunde versie van MongoDB krijgt u een foutmelding wanneer u $or
probeert te gebruiken. zoals dit:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
Dus om dit op te lossen heb je nodig:
-
Om een MongoDB-serverversie van 2.6 of hoger te hebben die de
$text
. ondersteunt syntaxis (of leef met opdrachtformulieren) -
Om te leven met indexering over meerdere velden en het gebruik van een enkele index.
-
Om "afzonderlijke zoekopdrachten" uit te voeren in plaats van uw "of"-voorwaarden en de resultaten te "combineren" in uw client-API-interface.
Dat is de enige manier waarop u "of"-voorwaarden zoals deze krijgt met MongoDB-tekstzoeken.