sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik meerdere tekst zoeken met $text query en $of in mongodb / mangoest?

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.

  1. Een $or uitdrukking kan slechts één . hebben speciale indexuitdrukking, ofwel "tekst" of "geospatiaal" in de argumenten.

  2. 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:

  1. Om een ​​MongoDB-serverversie van 2.6 of hoger te hebben die de $text . ondersteunt syntaxis (of leef met opdrachtformulieren)

  2. Om te leven met indexering over meerdere velden en het gebruik van een enkele index.

  3. 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.



  1. Veld bijwerken met de waarde van een ander veld in het document

  2. MongoDB $graphLookup krijgt kinderen op alle niveaus diep - genest resultaat

  3. Aantal exemplaren tellen in genest mongodb-document en groep behouden

  4. Mongo C#-stuurprogramma werkt een specifiek element in een geneste array bij