Regularni izrazi koriste se za podudaranje uzoraka, što je u osnovi za nizove nalaza u dokumentima.
Ponekad prilikom dohvaćanja dokumenata u zbirci možda nećete znati točno koju vrijednost polja točno tražite. Stoga se mogu koristiti regularni izrazi koji pomažu u pronalaženju podataka na temelju vrijednosti pretraživanja koje se podudaraju s uzorkom.
U ovom vodiču naučit ćete -
- Korištenje $ regex operatora za podudaranje uzoraka
- Podudaranje uzorka s $ opcijama
- Podudaranje uzorka bez operatora regularnog izraza
- Dohvaćanje posljednjih 'n' dokumenata iz zbirke
Korištenje $ regex operatora za podudaranje uzoraka
Regex operator u MongoDB koristi se za traženje određenih nizova u zbirci. 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 svojoj zbirci imamo sljedeće dokumente.
Id zaposlenika | ime zaposlenika |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Ovdje u donjem kodu koristili 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 specificiramo $ regex operatora da definira kriterije pretraživanja za 'Gu'
- Printjson se koristi za bolji ispis svakog dokumenta koji se vraća upitom.
Ako se naredba uspješno izvrši, prikazat će se sljedeći izlaz:
Izlaz:
Izlaz jasno pokazuje da se vraćaju oni dokumenti u kojima Ime zaposlenika sadrži znakove 'Gu'.
Ako pretpostavimo da vaša kolekcija sadrži sljedeće dokumente s dodatnim dokumentom koji je sadržavao ime zaposlenika kao "Guru999". Ako ste kriterij pretraživanja unijeli kao "Guru99", vratit će se i dokument koji je sadržavao "Guru999". Ali pretpostavimo ako ovo nismo željeli i željeli smo vratiti dokument s "Guru99". Tada to možemo učiniti s točno podudaranjem uzorka. Za točno podudaranje uzorka upotrijebit ćemo znak i $. Dodati ćemo znak na početku niza i $ na kraju niza.
Id zaposlenika | ime zaposlenika |
22 | NewMartin |
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 $. Služi za osiguravanje da niz započinje određenim znakom, a $ za osiguravanje da niz završava određenim znakom. Dakle, kada se kôd izvrši, dohvatit će samo niz s imenom "Guru99".
- Printjson se koristi za bolji ispis svakog dokumenta koji se vraća upitom.
Ako se naredba uspješno izvrši, prikazat će se sljedeći izlaz:
Izlaz:
U izlazu je jasno vidljivo da se dohvaća niz "Guru99".
Podudaranje uzorka s $ opcijama
Kada koristite regex operator, također možete pružiti dodatne mogućnosti pomoću ključne riječi $ options . Na primjer, pretpostavimo da ste željeli pronaći sve dokumente koji su u imenu zaposlenika imali 'Gu', bez obzira na to jesu li velika i mala ili velika. Ako se želi takav rezultat, trebamo 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 svojoj zbirci imamo sljedeće dokumente.
Id zaposlenika | ime zaposlenika |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Sada, ako pokrenemo isti upit kao u prošloj temi, u rezultatu nikada ne bismo vidjeli dokument s "GURU99". Da 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:
- Opcija $ s parametrom 'I' (što znači neosjetljivost na velika i mala slova) određuje da pretragu želimo izvršiti bez obzira nađemo li slova 'Gu' malim ili velikim slovima.
Ako se naredba uspješno izvrši, 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.
Podudaranje uzorka bez operatora regularnog izraza
Može se izvršiti i podudaranje uzoraka 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:
- Opcija "//" u osnovi znači odrediti kriterije pretraživanja unutar ovih graničnika. Stoga specificiramo / Gu / da ponovno pronađemo one dokumente koji u svom imenu zaposlenika imaju 'Gu'.
Ako se naredba uspješno izvrši, 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 posljednjih 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 svojoj zbirci imamo sljedeće dokumente:
Id zaposlenika | ime zaposlenika |
22 | NewMartin |
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 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 ili silaznim redoslijedom tako da zadnji dokument postane prvi dokument koji će se prikazati.
2) Zatim upotrijebite klauzulu ograničenja da biste samo prikazali broj zapisa koji želite. Ovdje smo postavili klauzulu o ograničenju (2), tako da će se dohvatiti zadnja dva dokumenta.
Ako se naredba uspješno izvrši, 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 u opadajućem redoslijedu, a zatim pomoću klauzule ograničenja vratiti 'n' potreban broj dokumenata.
Napomena : Ako se pretraživanje vrši na nizu koji je veći od recimo 38 000 znakova, neće prikazati prave rezultate.
Sažetak:
- Usklađivanje uzoraka može postići $ regex operator. Ovaj se operator može koristiti za pronalaženje određenih nizova u zbirci.
- Simbol i $ mogu se koristiti za točna pretraživanja teksta s pomoću kako bi se osiguralo da niz započinje određenim znakom, a $ kako bi se osiguralo da niz završava određenim znakom.
- Znak '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 bez obzira jesu li mala ili velika.
- Graničnici // također se mogu koristiti za podudaranje uzoraka.
- Upotrijebite kombinaciju funkcije sortiranja i ograničenja da biste vratili posljednjih n dokumenata u zbirci. Funkcija sortiranja može se koristiti za vraćanje dokumenata u opadajućem redoslijedu nakon čega se klauzula ograničenja može koristiti za ograničavanje broja dokumenata koji se vraćaju.