Hoe te zoeken naar delen van tekst met MongoDB?

Ik heb enkele waarden in een verzameling in een document. Mijn sleutel bereik kan bijvoorbeeld zijn:

  • 10 - 29
  • 30 - 39
  • 40 - 49

Dat zijn allemaal snaren. Ik wil op een of andere manier zoeken (in MongoDB) naar strings die beginnen met 10 en eindigen met 49 . Hoe kan ik dit doen?

Ik weet dat ik deze als nummers moet hebben, maar dat is niet mogelijk vanwege de structuur van hoe het systeem is gemaakt.

Bedankt

1

1 antwoord

Je hebt gelijk, de beste optie zou zijn om deze als cijfers te modelleren. Mijn beste (enige) alternatieve suggestie zou echter zijn om een ​​regex-zoekopdracht te gebruiken. Zie hier voor de documenten over regex-zoekopdrachten voor mongo en hier voor het maken van bereikuitdrukkingen.

Afhankelijk van het mogelijke bereik, zou uw vraag ongeveer zo zijn

db.collection.find( { range : /[1-4][0-9] - [1-4][0-9]/ } );

die overeenkomt met uw opgegeven bereikopties [10 - 29, 30 - 39, 40 - 49] . Merk op dat dit ook overeenkomt met 49 - 10 , dus je zou die uitdrukking moeten verharden als er uitsluitingen zijn die niet in de vraag worden genoemd.

Opmerking: voor regex-query's zijn de kosten van de prestaties van toepassing, hermodellering en het gebruik van ingebouwde functies voor $ gt $ lt is zeker wenselijk.

Succes!

2
toegevoegd
@mnemosyn Geweldige vangst, belangrijk punt om te begrijpen wanneer uw indexen worden gebruikt.
toegevoegd de auteur markdsievers, de bron
Gebruik indien mogelijk een root-regex (dat wil zeggen, start met ^ ), anders werkt indexering niet.
toegevoegd de auteur mnemosyn, de bron