MongoDB Regular Expression (Regex) med eksempler

Innholdsfortegnelse:

Anonim

Regelmessige uttrykk brukes til mønstermatching, som i utgangspunktet er for funnstrenger 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 vanlige uttrykk for å hjelpe til med å hente data basert på mønster som samsvarer med søkeverdier.

I denne opplæringen lærer du -

  • Bruker $ regex-operator for mønstermatching
  • Mønster Matching med $ opsjoner
  • Mønstermatching uten regex-operatoren
  • Henter siste 'n' dokumenter fra en samling

Bruker $ regex-operator for mønstermatching

Regex-operatoren i MongoDB brukes til å søke etter bestemte strenger i samlingen. Følgende eksempel viser hvordan dette kan gjøres.

La oss anta at vi har den samme ansattesamlingen som har feltnavnene "Employeeid" og "EmployeeName". 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)

Kode Forklaring:

  1. Her vil vi finne alle ansatte navn som har tegnene 'Gu'. Derfor spesifiserer vi $ regex-operatøren for å definere søkekriteriene til 'Gu'
  2. Printjson brukes til å skrive ut hvert dokument som returneres av spørringen på en bedre måte.

Hvis kommandoen er utført vellykket, vil følgende utdata vises:

Produksjon:

Utgangen viser tydelig at de dokumentene der ansattes navn inneholder 'Gu' -tegnene, returneres.

Hvis antar at samlingen din har følgende dokumenter med et tilleggsdokument som inneholdt ansattes navn som "Guru999". Hvis du skrev inn søkekriteriene som "Guru99", ville det også returnere dokumentet som hadde "Guru999". Men anta at hvis vi ikke ønsket dette og bare ønsket å returnere dokumentet med "Guru99". Da kan vi gjøre dette med nøyaktig mønstermatching. 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) 

Kode Forklaring:

  1. Her i søkekriteriene bruker vi tegnet og $. Brukes til å sikre at strengen starter med et bestemt tegn, og $ brukes til å sikre at strengen slutter med et bestemt tegn. Så når koden kjøres, vil den bare hente strengen med navnet "Guru99".
  2. Printjson brukes til å skrive ut hvert dokument som returneres av spørringen på en bedre måte.

Hvis kommandoen er utført vellykket, vil følgende utdata vises:

Produksjon:

I utgangen er det tydelig at strengen "Guru99" blir hentet.

Mønster Matching med $ opsjoner

Når du bruker regex-operatøren, kan du også tilby flere alternativer ved å bruke søkeordet $ options . Anta for eksempel at du ønsket å finne alle dokumentene som hadde "Gu" i navnet på de ansatte, uavhengig av om det var store og små bokstaver. Hvis et slikt resultat er ønsket, må vi bruke $ -alternativene med liten bokstavsfølsomhet.

Følgende eksempel viser hvordan dette kan gjøres.

La oss anta at vi har den samme ansattesamlingen som har feltnavnene "Employeeid" og "EmployeeName".

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 det samme spørsmålet som i forrige emne, 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) 

Kode Forklaring:

  1. $ -Alternativene med 'I' -parameteren (som betyr ufølsomhet mellom store og små bokstaver) spesifiserer at vi vil utføre søket uansett om vi finner bokstavene 'Gu' i små eller store bokstaver.

Hvis kommandoen er utført vellykket, vil følgende utdata vises:

Produksjon:

  1. Resultatet viser tydelig at selv om ett dokument har store bokstaver 'Gu', blir dokumentet fremdeles vist i resultatsettet.

Mønstermatching 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)

Kode Forklaring:

  1. Alternativene "//" betyr i utgangspunktet å spesifisere søkekriteriene i disse avgrensningene. Derfor spesifiserer vi / Gu / for å finne de dokumentene som har "Gu" i ansattnavn.

Hvis kommandoen er utført vellykket, vil følgende utdata vises:

Produksjon:

Utgangen viser tydelig at de dokumentene der ansattes navn inneholder 'Gu' -tegnene, returneres.

Henter siste 'n' dokumenter fra en samling

Det er forskjellige måter å få de siste n dokumentene i en samling.

La oss se på en av måtene via følgende trinn

Følgende eksempel viser hvordan dette kan gjøres.

La oss anta at vi har den samme ansattesamlingen som har feltnavnene "Employeeid" og "EmployeeName".

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)

Kode Forklaring:

1) Når du spør etter dokumentene, kan du bruke sorteringsfunksjonen til å sortere postene i omvendt rekkefølge basert på _id-feltverdien i samlingen. -1 indikerer i utgangspunktet å sortere dokumentene i omvendt eller fallende rekkefølge slik at det siste dokumentet blir det første dokumentet som vises.

2) Bruk deretter grenseparagrafen for å bare vise antall poster du vil ha. Her har vi satt grenseklausulen (2), så den henter de to siste dokumentene.

Hvis kommandoen er utført vellykket, vil følgende utdata vises:

Produksjon:

Resultatet 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 begrensningsparagrafen for å returnere 'n' antall dokumenter som kreves.

Merk : Hvis søket utføres på en streng som er større enn si 38.000 tegn, vil den ikke vise de riktige resultatene.

Sammendrag:

  • Mønstermatching kan oppnås av $ regex-operatøren. Denne operatøren kan brukes til å finne for visse strenger i samlingen.
  • Og $ -symbolet kan brukes til eksakte tekstsøk der brukes til å sikre at strengen starter med et bestemt tegn og $ brukes til å sikre at strengen slutter med et bestemt tegn.
  • 'Jeg' sammen med $ regex-operatoren kan brukes til å spesifisere store og små bokstaver, slik at det kan søkes i strenger om de er med små eller store bokstaver.
  • Avgrensningene // kan også brukes til mønstermatching.
  • Bruk en kombinasjon av sortering og begrensningsfunksjonen for å returnere de siste n dokumentene i samlingen. Sorteringsfunksjonen kan brukes til å returnere dokumentene i synkende rekkefølge, hvoretter grenseklausulen kan brukes til å begrense antall dokumenter som returneres.