MongoDB Regular Expression (Regex) med eksempler

Indholdsfortegnelse:

Anonim

Regulære udtryk bruges til mønstermatchning, hvilket grundlæggende er til fundingsstrenge i dokumenter.

Nogle gange ved hentning af dokumenter i en samling ved du muligvis ikke nøjagtigt, hvad den nøjagtige feltværdi skal søges efter. Derfor kan man bruge regulære udtryk til at hjælpe med at hente data baseret på mønster, der matcher søgeværdier.

I denne vejledning lærer du -

  • Brug af $ regex-operator til mønstermatchning
  • Mønster Matching med $ optioner
  • Mønstertilpasning uden regex-operatoren
  • Henter sidste 'n' dokumenter fra en samling

Brug af $ regex-operator til mønstermatchning

Regex-operatoren i MongoDB bruges til at søge efter specifikke strenge i samlingen. Følgende eksempel viser, hvordan dette kan gøres.

Lad os antage, at vi har vores samme medarbejdersamling, som har feltnavne "Medarbejder-id" og "Medarbejdernavn". Lad os også antage, at vi har følgende dokumenter i vores samling.

Medarbejder-ID Ansattes navn
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Her i nedenstående kode har vi brugt regex-operator til at specificere søgekriterierne.

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Kode Forklaring:

  1. Her vil vi finde alle medarbejdernavne, der har tegnene 'Gu'. Derfor specificerer vi $ regex-operatøren for at definere søgekriterierne for 'Gu'
  2. Printjsonen bruges til at udskrive hvert dokument, som returneres af forespørgslen på en bedre måde.

Hvis kommandoen udføres med succes, vises følgende output:

Produktion:

Outputtet viser tydeligt, at de dokumenter, hvor medarbejdernavnet indeholder 'Gu' -tegnene, returneres.

Hvis antager, at din samling har følgende dokumenter med et yderligere dokument, der indeholdt medarbejdernavnet som "Guru999". Hvis du indtastede søgekriterierne som "Guru99", ville det også returnere dokumentet med "Guru999". Men antag, hvis vi ikke ville have dette og kun ville returnere dokumentet med "Guru99". Så kan vi gøre dette med nøjagtig mønstermatchning. For at foretage en nøjagtig mønstermatchning bruger vi tegnet og $. Vi tilføjer tegnet i begyndelsen af ​​strengen og $ i slutningen af ​​strengen.

Medarbejder-ID Ansattes navn
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Følgende eksempel viser, hvordan dette kan gøres.

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson) 

Kode Forklaring:

  1. Her i søgekriterierne bruger vi tegnet og $. Bruges til at sikre, at strengen starter med et bestemt tegn, og $ bruges til at sikre, at strengen slutter med et bestemt tegn. Så når koden udføres, henter den kun strengen med navnet "Guru99".
  2. Printjsonen bruges til at udskrive hvert dokument, som returneres af forespørgslen på en bedre måde.

Hvis kommandoen udføres med succes, vises følgende output:

Produktion:

I output er det tydeligt synligt, at streng "Guru99" hentes.

Mønster Matching med $ optioner

Når du bruger regex-operatoren, kan man også give yderligere muligheder ved at bruge nøgleordet $ options . Antag for eksempel, at du ville finde alle de dokumenter, der havde 'Gu' i deres medarbejdernavn, uanset om det var store og små bogstaver. Hvis et sådant resultat ønskes, er vi nødt til at bruge $ -indstillingerne med store og små bogstaver.

Følgende eksempel viser, hvordan dette kan gøres.

Lad os antage, at vi har vores samme medarbejdersamling, som har feltnavne "Medarbejder-id" og "Medarbejdernavn".

Lad os også antage, at vi har følgende dokumenter i vores samling.

Medarbejder-ID Ansattes navn
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Hvis vi nu kører den samme forespørgsel som i det sidste emne, ville vi aldrig se dokumentet med "GURU99" i resultatet. For at sikre, at dette kommer i resultatsættet, skal vi tilføje $ optioner "I" -parameteren.

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) 

Kode Forklaring:

  1. $ -Indstillingerne med 'I' -parameteren (hvilket betyder store og små bogstaver) specificerer, at vi vil udføre søgningen, uanset om vi finder bogstaverne 'Gu' med små eller store bogstaver.

Hvis kommandoen udføres med succes, vises følgende output:

Produktion:

  1. Outputtet viser tydeligt, at selvom et dokument har store bogstaver 'Gu', bliver dokumentet stadig vist i resultatsættet.

Mønstertilpasning uden regex-operatoren

Man kan også lave mønstermatchning uden regex-operatoren. Følgende eksempel viser, hvordan dette kan gøres.

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Kode Forklaring:

  1. Valgmulighederne "//" betyder grundlæggende at angive dine søgekriterier inden for disse afgrænsere. Derfor specificerer vi / Gu / for igen at finde de dokumenter, der har 'Gu' i deres medarbejdernavn.

Hvis kommandoen udføres med succes, vises følgende output:

Produktion:

Outputtet viser tydeligt, at de dokumenter, hvor medarbejdernavnet indeholder 'Gu' -tegnene, returneres.

Henter sidste 'n' dokumenter fra en samling

Der er forskellige måder at få de sidste n dokumenter i en samling.

Lad os se på en af ​​måderne via følgende trin

Følgende eksempel viser, hvordan dette kan gøres.

Lad os antage, at vi har vores samme medarbejdersamling, som har feltnavne "Medarbejder-id" og "Medarbejdernavn".

Lad os også antage, at vi har følgende dokumenter i vores samling:

Medarbejder-ID Ansattes 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 forespørger efter dokumenterne, skal du bruge sorteringsfunktionen til at sortere posterne i omvendt rækkefølge baseret på _id-feltværdien i samlingen. -1 angiver grundlæggende at sortere dokumenterne i omvendt rækkefølge eller faldende rækkefølge, så det sidste dokument bliver det første dokument, der skal vises.

2) Brug derefter grænseklausulen til bare at vise det antal poster, du ønsker. Her har vi sat grænseklausulen (2), så den henter de to sidste dokumenter.

Hvis kommandoen udføres med succes, vises følgende output:

Produktion:

Outputtet viser tydeligt, at de sidste to dokumenter i samlingen vises. Derfor har vi tydeligt vist, at for at hente de sidste 'n' dokumenter i samlingen, kan vi først sortere dokumenterne i faldende rækkefølge og derefter bruge grænseklausulen til at returnere det 'n' antal dokumenter, der kræves.

Bemærk : Hvis søgningen udføres på en streng, der er større end f.eks. 38.000 tegn, viser den ikke de rigtige resultater.

Resumé:

  • Mønstertilpasning kan opnås af $ regex-operatoren. Denne operatør kan bruges til at finde bestemte strenge i samlingen.
  • Symbolet og $ kan bruges til nøjagtige tekstsøgninger, hvor bruges til at sikre, at strengen starter med et bestemt tegn og $ bruges til at sikre, at strengen slutter med et bestemt tegn.
  • 'Jeg' sammen med $ regex-operatoren kan bruges til at specificere store og små bogstaver, så der kan søges i strenge, uanset om de er med små eller store bogstaver.
  • Afgrænserne // kan også bruges til mønstermatchning.
  • Brug en kombination af sortering og grænsefunktionen til at returnere de sidste n dokumenter i samlingen. Sorteringsfunktionen kan bruges til at returnere dokumenterne i faldende rækkefølge, hvorefter grænseklausulen kan bruges til at begrænse antallet af dokumenter, der returneres.