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.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Objašnjenje koda:
- Ovdje želimo pronaći sva imena zaposlenika koja sadrže znakove 'Gu'. Stoga navodimo operator $regex da definiramo kriterije pretraživanja za 'Gu'
- 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:
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.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Objašnjenje koda:
- 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".
- 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:
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”.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Objašnjenje koda:
- $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:
- 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.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Objašnjenje koda:
- 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:
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 |
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:
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.