MongoDB Regulært uttrykk (Regex) med eksempler
Regelmessige uttrykk brukes for 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
De regex-operator 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 vår samme ansattsamling 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 |
Her i koden nedenfor har vi brukt regex-operator for å spesifisere søkekriteriene.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kodeforklaring:
- Her ønsker vi å finne alle medarbeidernavn som har tegnene 'Gu' i seg. Derfor spesifiserer vi $regex-operatoren for å definere søkekriteriene for '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 anta at samlingen din har følgende dokumenter med et tilleggsdokument som inneholdt medarbeidernavnet som "Guru999". Hvis du skrev inn søkekriteriene som "Guru99", vil det også returnere dokumentet som hadde "Guru999". Men anta at hvis vi ikke ønsket dette og bare ville returnere dokumentet med "Guru99". Da kan vi gjøre dette med nøyaktig mønstertilpasning. For å gjøre en nøyaktig mønstermatching, bruker vi tegnet ^ 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)
Kodeforklaring:
- Her i søkekriteriene bruker vi tegnet ^ 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 utgangen er det tydelig synlig at strengen "Guru99" er hentet.
Mønstermatching med $options
Når du 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 parameter for små og store bokstaver.
Følgende eksempel viser hvordan dette kan gjøres.
La oss anta at vi har vår samme ansattsamling 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 |
Nå hvis vi kjører samme spørring som i det siste emnet, ville 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)
Kodeforklaring:
- $options med 'I'-parameteren (som betyr ufølsomhet for store og små bokstaver) spesifiserer at vi ønsker å 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 store bokstaver 'Gu' , blir dokumentet fortsatt vist i resultatsettet.
Mønstertilpasning uten regex-operatoren
Man kan også gjøre mønstertilpasning uten regex-operatoren. Følgende eksempel viser hvordan dette kan gjøres.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kodeforklaring:
- "//"-alternativene betyr i utgangspunktet å spesifisere søkekriteriene dine innenfor disse skilletegnene. Derfor spesifiserer vi /Gu/ for igjen å finne de dokumentene som har 'Gu' i EmployeeName.
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 vår samme ansattsamling 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)
Kodeforklaring:
1) Når du spør etter dokumentene, bruk sorteringsfunksjonen for å sortere postene i omvendt rekkefølge basert på _id-feltverdien i samlingen. -1 indikerer i utgangspunktet å sortere dokumentene i omvendt eller synkende rekkefølge slik at det siste dokumentet blir det første dokumentet som vises.
2) Bruk deretter limit-klausulen til å bare vise antall poster du ønsker. Her har vi satt grenseparagrafen (2), så 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.
Oppsummering
- Mønstertilpasning kan oppnås av $regex-operatoren. Denne operatoren kan brukes til å finne bestemte strenger i samlingen.
- ^ og $-symbolet kan brukes for eksakte tekstsøk med ^ brukes for å sikre at strengen starter med et bestemt tegn og $ brukes for å sikre at strengen slutter med et bestemt tegn.
- 'i' sammen med $regex-operatoren kan brukes til å spesifisere ufølsomhet for store og små bokstaver, slik at strenger kan søkes i enten de er med små eller store bokstaver.
- Avgrensningstegnene // kan også brukes for mønstertilpasning.
- Bruk en kombinasjon av sortering og grensefunksjonen for å returnere de siste n dokumentene i samlingen. Sorteringsfunksjonen kan brukes til å returnere dokumentene i synkende rekkefølge, hvoretter grenseparagrafen kan brukes til å begrense antall dokumenter som returneres.