MongoDB Regulært uttrykk ($regex) med eksempler
⚡ Smart oppsummering
MongoDB Regulære uttrykk utfører mønstersamsvar for å finne strenger i dokumenter, ved hjelp av $regex-operatoren, $options-flagget for ufølsomhet for store og små bokstaver, ankere for eksakte treff og skråstrek-skilletegn når den nøyaktige feltverdien er ukjent.
Regulære uttrykk brukes til mønstermatching, som i utgangspunktet er for å finne strenger i dokumenter.
Noen ganger når du henter dokumenter i en samling, vet du kanskje ikke nøyaktig hva den eksakte feltverdien du skal søke etter. Derfor kan man bruke regulære uttrykk for å hjelpe til med å hente data basert på mønstermatchende søkeverdier.
Bruker $regex-operator for mønstertilpasning
$regex-operatoren i MongoDB brukes til å søke etter spesifikke strenger i samlingen. Følgende eksempel viser hvordan dette kan gjøres.
La oss anta at vi har den samme ansattsamlingen vår, som har feltnavnene «AnsattID» og «Ansattnavn». La oss også anta at vi har følgende dokumenter i samlingen vår.
| Ansatt-ID | arbeidstakers navn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | Joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
Her i koden nedenfor har vi brukt $regex-operatoren til å spesifisere søkekriteriene.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Code Forklaring:
- Her ønsker vi å finne alle ansattnavn som inneholder tegnene «Gu». Derfor spesifiserer vi $regex-operatoren for å definere søkekriteriene «Gu».
- Printjson brukes til å skrive ut hvert dokument som returneres av spørringen på en bedre måte.
Hvis kommandoen utføres vellykket, vil følgende utgang vises:
Utgang:
Utdataene viser tydelig at de dokumentene der medarbeidernavnet inneholder "Gu"-tegnene returneres.
Hvis vi antar at samlingen din har følgende dokumenter med et tilleggsdokument som inneholder ansattnavnet som «Guru999”. Hvis du skrev inn søkekriteriene som «Guru99”, ville den også returnere dokumentet som hadde “Guru999”. Men la oss si at vi ikke ønsket dette, men bare ville returnere dokumentet med «Guru99”. Så kan vi gjøre dette med eksakt mønstergjenkjenning. For å gjøre en eksakt mønstergjenkjenning bruker vi tegnene ^ og $. Vi legger til tegnet ^ i begynnelsen av strengen og $ på slutten av strengen.
| Ansatt-ID | arbeidstakers navn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | Joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 8 | Guru999 |
Følgende eksempel viser hvordan dette kan gjøres.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Code Forklaring:
- Her i søkekriteriene bruker vi tegnene ^ og $. ^ brukes for å sikre at strengen starter med et bestemt tegn, og $ brukes for å sikre at strengen slutter med et bestemt tegn. Så når koden kjøres, vil den bare hente strengen med navnet «Guru99. "
- Printjson brukes til å skrive ut hvert dokument som returneres av spørringen på en bedre måte.
Hvis kommandoen utføres vellykket, vil følgende utgang vises:
Utgang:
I utdataene er det tydelig synlig at strengen «Guru99” er hentet.
Mønstermatching med $options
Når man bruker $regex-operatoren, kan man også gi flere alternativer ved å bruke $alternativer søkeord. Tenk deg for eksempel at du ønsket å finne alle dokumentene som hadde "Gu" i medarbeidernavnet, uavhengig av om det var store og små bokstaver eller ikke. Hvis et slikt resultat er ønsket, må vi bruke $alternativer med parameteren for ufølsomhet for store og små bokstaver.
Følgende eksempel viser hvordan dette kan gjøres.
La oss anta at vi har den samme ansatt-samlingen som har feltnavnene «Ansatt-ID» og «Ansattnavn».
La oss også anta at vi har følgende dokumenter i samlingen vår.
| Ansatt-ID | arbeidstakers navn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | Joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 7 | GURU99 |
Hvis vi kjører den samme spørringen som i forrige emne, vil vi aldri se dokumentet med «GURU99» i resultatet. For å sikre at dette kommer i resultatsettet, må vi legge til parameteren $options «i».
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Code Forklaring:
- $options med parameteren 'i' (som betyr at det ikke skilles mellom store og små bokstaver) spesifiserer at vi vil utføre søket uansett om vi finner bokstavene 'Gu' med små eller store bokstaver.
Hvis kommandoen utføres vellykket, vil følgende utgang vises:
Utgang:
- Utdataene viser tydelig at selv om ett dokument har stor bokstav 'Gu', vises dokumentet fortsatt i resultatsettet.
Mønstertilpasning uten regex-operatoren
Man kan også gjøre mønstermatching uten $regex-operatoren. Følgende eksempel viser hvordan dette kan gjøres.
db.Employee.find({EmployeeName: /Gu/}).forEach(printjson)
Code Forklaring:
- «//»-skilletegnene betyr i bunn og grunn å spesifisere søkekriteriene dine innenfor disse skilletegnene. Derfor spesifiserer vi /Gu/ for å igjen finne de dokumentene som har «Gu» i ansattnavnet.
Hvis kommandoen utføres vellykket, vil følgende utgang vises:
Utgang:
Utdataene viser tydelig at de dokumentene der medarbeidernavnet inneholder "Gu"-tegnene returneres.
Henter siste 'n' dokumenter fra en samling
Det er ulike måter å få tak i de siste n dokumentene i en samling.
La oss se på en av måtene via de følgende trinnene.
Følgende eksempel viser hvordan dette kan gjøres.
La oss anta at vi har den samme ansatt-samlingen som har feltnavnene «Ansatt-ID» og «Ansattnavn».
La oss også anta at vi har følgende dokumenter i samlingen vår:
| Ansatt-ID | arbeidstakers navn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | Joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Code Forklaring:
- Når du spør etter dokumenter, bruk sorteringsfunksjonen til å sortere postene i omvendt rekkefølge basert på verdien i _id-feltet i samlingen. -1 indikerer i utgangspunktet at dokumentene skal sorteres i omvendt rekkefølge eller synkende rekkefølge, slik at det siste dokumentet blir det første dokumentet som vises.
- Bruk deretter limit-klausulen til å bare vise antall poster du ønsker. Her har vi satt limit-klausulen (2), slik at den vil hente de to siste dokumentene.
Hvis kommandoen utføres vellykket, vil følgende utgang vises:
Utgang:
Utdataene viser tydelig at de to siste dokumentene i samlingen vises. Derfor har vi tydelig vist at for å hente de siste 'n'-dokumentene i samlingen, kan vi først sortere dokumentene i synkende rekkefølge og deretter bruke grenseparagrafen for å returnere 'n' antall dokumenter som kreves.
Merknader: Hvis søket utføres på en streng som er større enn for eksempel 38,000 XNUMX tegn, vil den ikke vise de riktige resultatene.











