MongoDB Regularni izraz (Regex) s primjerima

Regularni izrazi koriste se za podudaranje uzoraka, što je u osnovi za pronalaženje nizova unutar dokumenata.

Ponekad prilikom dohvaćanja dokumenata u zbirci možda nećete točno znati koju točnu vrijednost polja tražite. Stoga se regularni izrazi mogu koristiti kao pomoć u dohvaćanju podataka na temelju vrijednosti pretraživanja podudaranja uzoraka.

Korištenje operatora $regex za podudaranje uzorka

The regex operator u MongoDB koristi se za traženje određenih nizova u kolekciji. Sljedeći primjer pokazuje kako se to može učiniti.

Pretpostavimo da imamo istu kolekciju zaposlenika koja ima nazive polja "Employeeid" i "EmployeeName". Pretpostavimo također da u našoj zbirci imamo sljedeće dokumente.

ID zaposlenika ime zaposlenika
22 NoviMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Ovdje u donjem kodu upotrijebili smo regex operator za određivanje kriterija pretraživanja.

Korištenje $regexa Operator za usklađivanje uzorka

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

Objašnjenje koda:

  1. Ovdje želimo pronaći sva imena zaposlenika koja sadrže znakove 'Gu'. Stoga navodimo operator $regex da definiramo kriterije pretraživanja za 'Gu'
  2. Printjson se koristi za bolji ispis svakog dokumenta koji je vraćen upitom.

Ako je naredba uspješno izvršena, prikazat će se sljedeći izlaz:

Izlaz:

Korištenje $regexa Operator za usklađivanje uzorka

Izlaz jasno pokazuje da se vraćaju oni dokumenti u kojima ime zaposlenika sadrži znakove 'Gu'.

Pretpostavimo da vaša kolekcija ima sljedeće dokumente s dodatnim dokumentom koji sadrži ime zaposlenika kao "Guru999". Ako ste unijeli kriterij pretraživanja kao "Guru99", također će vratiti dokument koji je imao "Guru999". Ali pretpostavimo da ovo ne želimo i samo želimo vratiti dokument s “Guru99”. Tada to možemo učiniti s točnim podudaranjem uzorka. Za točno podudaranje uzoraka koristit ćemo znak ^ i $. Dodat ćemo znak ^ na početak niza i $ na kraj niza.

ID zaposlenika ime zaposlenika
22 NoviMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Sljedeći primjer pokazuje kako se to može učiniti.

Korištenje $regexa Operator za usklađivanje uzorka

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

Objašnjenje koda:

  1. Ovdje u kriterijima pretraživanja koristimo znak ^ i $. ^ se koristi kako bi se osiguralo da niz počinje određenim znakom, a $ se koristi kako bi se osiguralo da niz završava određenim znakom. Dakle, kada se kod izvrši, dohvatit će samo niz s imenom "Guru99".
  2. Printjson se koristi za bolji ispis svakog dokumenta koji je vraćen upitom.

Ako je naredba uspješno izvršena, prikazat će se sljedeći izlaz:

Izlaz:

Korištenje $regexa Operator za usklađivanje uzorka

U izlazu je jasno vidljivo da je dohvaćen niz "Guru99".

Usklađivanje uzorka s $opcijama

Kada koristite regex operator, također možete pružiti dodatne opcije korištenjem $opcije ključna riječ. Na primjer, pretpostavimo da želite pronaći sve dokumente koji imaju 'Gu' u svom imenu zaposlenika, bez obzira na to jesu li osjetljiva na velika ili mala slova. Ako želimo takav rezultat, tada moramo koristiti $opcije s parametrom neosjetljivosti na velika i mala slova.

Sljedeći primjer pokazuje kako se to može učiniti.

Pretpostavimo da imamo istu kolekciju zaposlenika koja ima nazive polja "Employeeid" i "EmployeeName".

Pretpostavimo također da u našoj zbirci imamo sljedeće dokumente.

ID zaposlenika ime zaposlenika
22 NoviMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Sada ako pokrenemo isti upit kao u prošloj temi, nikada nećemo vidjeti dokument s "GURU99" u rezultatu. Kako bismo osigurali da ovo dolazi u skupu rezultata, moramo dodati parametar $options “I”.

Usklađivanje uzorka s $opcijama

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

Objašnjenje koda:

  1. $options s parametrom 'I' (što znači neosjetljivost na velika i mala slova) specificira da želimo provesti pretragu bez obzira nalazimo li slova 'Gu' u malim ili velikim slovima.

Ako je naredba uspješno izvršena, prikazat će se sljedeći izlaz:

Izlaz:

Usklađivanje uzorka s $opcijama

  1. Izlaz jasno pokazuje da iako jedan dokument ima velika slova 'Gu', dokument se i dalje prikazuje u skupu rezultata.

Uparivanje uzorka bez operatora regularnog izraza

Također se može napraviti podudaranje uzorka bez operatora regularnog izraza. Sljedeći primjer pokazuje kako se to može učiniti.

Uparivanje uzorka bez regularnog izraza Operahumka

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

Objašnjenje koda:

  1. Opcije “//” u osnovi znače navođenje kriterija pretraživanja unutar ovih graničnika. Stoga specificiramo /Gu/ kako bismo ponovno pronašli one dokumente koji imaju 'Gu' u svom EmployeeName.

Ako je naredba uspješno izvršena, prikazat će se sljedeći izlaz:

Izlaz:

Uparivanje uzorka bez regularnog izraza Operahumka

Izlaz jasno pokazuje da se vraćaju oni dokumenti u kojima ime zaposlenika sadrži znakove 'Gu'.

Dohvaćanje posljednjih 'n' dokumenata iz zbirke

Postoje različiti načini za dobivanje zadnjih n dokumenata u zbirci.

Pogledajmo jedan od načina kroz sljedeće korake

Sljedeći primjer pokazuje kako se to može učiniti.

Pretpostavimo da imamo istu kolekciju zaposlenika koja ima nazive polja "Employeeid" i "EmployeeName".

Pretpostavimo također da u našoj zbirci imamo sljedeće dokumente:

ID zaposlenika ime zaposlenika
22 NoviMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Dohvaćanje posljednjih 'n' dokumenata iz zbirke

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Objašnjenje koda:

1) Prilikom postavljanja upita za dokumente, koristite funkciju sortiranja za sortiranje zapisa obrnutim redoslijedom na temelju vrijednosti polja _id u zbirci. -1 u osnovi označava sortiranje dokumenata obrnutim redoslijedom ili silaznim redoslijedom tako da posljednji dokument postane prvi dokument koji će se prikazati.

2) Zatim upotrijebite klauzulu o ograničenju da samo prikažete željeni broj zapisa. Ovdje smo postavili graničnu klauzulu (2), tako da će dohvatiti zadnja dva dokumenta.

Ako je naredba uspješno izvršena, prikazat će se sljedeći izlaz:

Izlaz:

Dohvaćanje posljednjih 'n' dokumenata iz zbirke

Izlaz jasno pokazuje da su prikazana posljednja dva dokumenta u zbirci. Stoga smo jasno pokazali da za dohvaćanje posljednjih 'n' dokumenata u zbirci, možemo prvo sortirati dokumente silaznim redoslijedom, a zatim koristiti klauzulu o ograničenju da vratimo 'n' broj dokumenata koji su potrebni.

bilješke: Ako se pretraživanje izvodi na nizu koji je veći od recimo 38,000 XNUMX znakova, neće prikazati prave rezultate.

Rezime

  • Usklađivanje uzorka može se postići operatorom $regex. Ovaj se operator može koristiti za traženje određenih nizova u kolekciji.
  • Simbol ^ i $ može se koristiti za točna pretraživanja teksta, pri čemu se ^ koristi da bi se osiguralo da niz počinje određenim znakom, a $ da se osigura da niz završava određenim znakom.
  • 'I' zajedno s operatorom $regex može se koristiti za određivanje neosjetljivosti na velika i mala slova tako da se nizovi mogu pretraživati ​​bilo da su pisani malim ili velikim slovima.
  • Razdjelnici // također se mogu koristiti za podudaranje uzoraka.
  • Upotrijebite kombinaciju sortiranja i limit funkcije da biste vratili zadnjih n dokumenata u kolekciji. Funkcija razvrstavanja može se koristiti za vraćanje dokumenata silaznim redoslijedom nakon čega se klauzula o ograničenju može koristiti za ograničavanje broja dokumenata koji se vraćaju.