regulære uttrykk brukes ofte i alle språk for å søke etter et mønster eller et ord i noen streng. MongoDB gir også funksjonalitet for regulære uttrykk for streng mønstergjenkjenning ved hjelp av $ regex
operatør. MongoDB bruker PCRE (Perl Kompatibel Regular Expression) som vanlig uttrykk språk.
I motsetning tekstsøk, vi trenger ikke å gjøre noen konfigurasjon eller kommando for å bruke vanlige uttrykk.
Tenk deg følgende dokumentstrukturen under innlegg
samling som inneholder innlegget tekst og dets tags: product: {"post_text": "nyte mongodb artikler om tutorialspoint", "tags": ["mongodb", "tutorialspoint"]}
Bruke regex Expression
Følgende regex spørre søker etter alle innlegg som inneholder strengen tutorialspoint
i det:
> db.posts.find ({post_text: {$ regex: "tutorialspoint "}})
Det samme spørsmålet kan også skrives som:
> db.posts.find ({post_text: /tutorialspoint /})
Bruke regex Expression med små bokstaver
Å gjøre søket små bokstaver, bruker vi $ alternativer
parameter med verdi $ i
sikret følgende kommando vil se etter strenger å ha ordet tutorialspoint
, uavhengig av mindre eller kapital saken:
> db.posts.find ({post_text: {$ regex: "tutorialspoint", $ alternativer: "$ i"}})
Et av resultatene finjustert fra denne spørringen er følgende dokument som inneholder Ordet tutorialspoint i ulike tilfeller: product: {"_id": objectID ("53493d37d852429c10000004"), "post_text": "Hei! Dette er mitt innlegg på TutorialsPoint "," tags ": [" tutorialspoint "]}
Bruke regex for array elementer:
Vi kan også bruke begrepet regex på rekke felt . Dette er spesielt viktig når vi implementerer funksjonaliteten tags Så hvis du ønsker å søke etter alle innleggene som har koder som begynner fra ordet tutorial (enten tutorial eller tutorials eller tutorialpoint eller tutorialphp), kan du bruke følgende kode:. < br >> db.posts.find ({tags: {$ regex: "tutorial"}})
Optimalisere regulære uttrykk spørringer:
Hvis dokumentet feltene er indeksert
, vil søket bruke gjøre bruk av indekserte verdier for å matche den regulære uttrykk. Dette gjør søket veldig fort i forhold til det vanlige uttrykket skanne hele samlingen.
Hvis det regulære uttrykket er en prefiks uttrykk
, blir alle kampene ment å starte med en viss streng tegn. For eksempel, hvis regex uttrykket er ^ tut
, deretter spørringen har for å søke etter bare de strengene som begynner med tut
.