sql >> Database >  >> NoSQL >> MongoDB

Hoe documenten opvragen in mongodb (pymongo) waar alle trefwoorden in een veld voorkomen?

Overweeg het gebruik van een tekstindex met een $text zoeken . Het is misschien een veel betere oplossing dan het gebruik van reguliere expressies. Zoeken met tekst levert echter documenten op op basis van een score-algoritme, dus het kan zijn dat u enkele resultaten krijgt die niet alle zoekwoorden bevatten die u zoekt.

Als u geen tekstindex aan dit veld kunt of wilt toevoegen, zou het lastig zijn om een ​​enkele reguliere expressie te gebruiken omdat u niet weet in welke volgorde deze woorden voorkomen. Ik beweer niet dat het onmogelijk is om te schrijven, maar je zult eindigen met een vreselijke gruwel, zelfs voor regex-normen. Het zou veel gemakkelijker zijn om de regex-operator meerdere keren te gebruiken door de $and . te gebruiken exploitant.

Ook zal het gebruik van een spatie als scheidingsteken mislukken wanneer het woord aan het begin of einde van de string staat of gevolgd wordt door een punt of komma. Gebruik de woordgrens token (\b ) in plaats daarvan.

collection.find(
    { $and : [
              {'documenttextfield': {'$regex': '\b' +keyword1+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword2+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword3+'\b'}},
         ]
    });

Houd er rekening mee dat dit een erg langzame query is, omdat deze drie reguliere expressies op elk afzonderlijk document van de verzameling worden uitgevoerd. Als dit een prestatiekritische query is, moet u serieus overwegen of een tekstindex echt niet voldoet. Als dit niet lukt, zou de laatste strohalm zijn om eventuele trefwoorden uit het documenttextfield te extraheren veld waarnaar iemand zou kunnen zoeken (wat elk uniek woord erin kan zijn) in een nieuw array-field documenttextfield_keywords , maak een normale index op dat veld en zoek in dat veld met de $all operator (in dat geval geen reguliere expressie vereist).




  1. De snelste MongoDB op Azure!

  2. Modellering van blogs en beoordelingen in mongodb en nodejs

  3. Mgo-aggregatie:hoe modeltypen opnieuw te gebruiken om gemengde resultaten op te vragen en te ontrafelen?

  4. Haal de waarden op uit de array en sla deze op in een csv-bestand met MongoDB