Expresiile regulate sunt folosite pentru potrivirea modelelor, care este practic pentru șirurile de descoperiri din documente.
Uneori, când preluați documente dintr-o colecție, este posibil să nu știți exact care este valoarea exactă a câmpului de căutat. Prin urmare, se pot utiliza expresii regulate pentru a ajuta la recuperarea datelor pe baza valorilor căutării de potrivire a modelelor.
În acest tutorial, veți învăța -
- Utilizarea operatorului $ regex pentru potrivirea modelelor
- Potrivirea modelului cu opțiunile $
- Potrivirea modelului fără operatorul regex
- Preluarea ultimelor documente „n” dintr-o colecție
Utilizarea operatorului $ regex pentru potrivirea modelelor
Operatorul regex din MongoDB este utilizat pentru a căuta șiruri specifice din colecție. Următorul exemplu arată cum se poate face acest lucru.
Să presupunem că avem aceeași colecție de angajați care are numele câmpului „Employeeid” și „EmployeeName”. Să presupunem, de asemenea, că avem următoarele documente în colecția noastră.
Card de identitate al angajatului | numele angajatului |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Aici, în codul de mai jos, am folosit operatorul regex pentru a specifica criteriile de căutare.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Explicatie cod:
- Aici vrem să găsim toate numele angajaților care au caracterele „Gu”. Prin urmare, specificăm operatorul $ regex pentru a defini criteriile de căutare ale „Gu”
- Printjson este utilizat pentru a imprima fiecare document care este returnat de interogare într-un mod mai bun.
Dacă comanda este executată cu succes, va fi afișată următoarea ieșire:
Ieșire:
Rezultatul arată în mod clar că acele documente în care numele angajatului conține caracterele „Gu” sunt returnate.
Dacă presupunem că colecția dvs. are următoarele documente cu un document suplimentar care conține numele angajatului ca „Guru999”. Dacă ați introdus criteriile de căutare ca „Guru99”, acesta va returna și documentul care avea „Guru999”. Dar să presupunem că dacă nu am vrut acest lucru și am dori doar să returnăm documentul cu „Guru99”. Apoi, putem face acest lucru cu potrivirea exactă a modelelor. Pentru a face o potrivire exactă a modelului, vom folosi caracterele și $. Vom adăuga caracterul la începutul șirului și $ la sfârșitul șirului.
Card de identitate al angajatului | numele angajatului |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
Următorul exemplu arată cum se poate face acest lucru.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Explicatie cod:
- Aici, în criteriile de căutare, folosim caracterele și $. Este folosit pentru a vă asigura că șirul începe cu un anumit caracter, iar $ este utilizat pentru a vă asigura că șirul se termină cu un anumit caracter. Deci, atunci când codul se execută, acesta va prelua doar șirul cu numele „Guru99”.
- Printjson este utilizat pentru a imprima fiecare document care este returnat de interogare într-un mod mai bun.
Dacă comanda este executată cu succes, va fi afișată următoarea ieșire:
Ieșire:
În rezultat, este clar vizibil că șirul „Guru99” este preluat.
Potrivirea modelului cu opțiunile $
Când utilizați operatorul regex, puteți oferi și opțiuni suplimentare utilizând cuvântul cheie $ options . De exemplu, să presupunem că ați dorit să găsiți toate documentele care conțineau „Gu” în numele angajaților lor, indiferent dacă a fost sensibil la majuscule sau minuscule. Dacă se dorește un astfel de rezultat, atunci trebuie să folosim opțiunile $ cu parametrul de insensibilitate cu majuscule.
Următorul exemplu arată cum se poate face acest lucru.
Să presupunem că avem aceeași colecție de angajați care are numele câmpului „Employeeid” și „EmployeeName”.
Să presupunem, de asemenea, că avem următoarele documente în colecția noastră.
Card de identitate al angajatului | numele angajatului |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Acum, dacă vom executa aceeași interogare ca în ultimul subiect, nu am vedea niciodată documentul cu „GURU99” în rezultat. Pentru a ne asigura că acest lucru vine în setul de rezultate, trebuie să adăugăm parametrul $ options „I”.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Explicatie cod:
- Opțiunile $ cu parametrul „I” (ceea ce înseamnă insensibilitate între majuscule și minuscule) specifică faptul că dorim să efectuăm căutarea indiferent dacă găsim literele „Gu” cu litere mici sau mari.
Dacă comanda este executată cu succes, va fi afișată următoarea ieșire:
Ieșire:
- Rezultatul arată clar că, deși un document are majuscula „Gu”, documentul este afișat în setul de rezultate.
Potrivirea modelului fără operatorul regex
Se poate face, de asemenea, potrivirea modelelor fără operatorul regex. Următorul exemplu arată cum se poate face acest lucru.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Explicatie cod:
- Opțiunile „//” înseamnă practic să vă specificați criteriile de căutare în cadrul acestor delimitatori. Prin urmare, specificăm / Gu / pentru a găsi din nou acele documente care au „Gu” în Numele lor de angajat.
Dacă comanda este executată cu succes, va fi afișată următoarea ieșire:
Ieșire:
Rezultatul arată în mod clar că acele documente în care numele angajatului conține caracterele „Gu” sunt returnate.
Preluarea ultimelor documente „n” dintr-o colecție
Există diferite modalități de a obține ultimele n documente dintr-o colecție.
Să ne uităm la unul dintre moduri prin următorii pași
Următorul exemplu arată cum se poate face acest lucru.
Să presupunem că avem aceeași colecție de angajați care are numele câmpului „Employeeid” și „EmployeeName”.
Să presupunem, de asemenea, că avem următoarele documente în colecția noastră:
Card de identitate al angajatului | numele angajatului |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Explicatie cod:
1) Când interogați documentele, utilizați funcția de sortare pentru a sorta înregistrările în ordine inversă pe baza valorii câmpului _id din colecție. -1 indică practic sortarea documentelor în ordine inversă sau descendentă, astfel încât ultimul document să devină primul document care trebuie afișat.
2) Apoi utilizați clauza limită pentru a afișa doar numărul de înregistrări dorite. Aici am stabilit clauza limită (2), deci va prelua ultimele două documente.
Dacă comanda este executată cu succes, va fi afișată următoarea ieșire:
Ieșire:
Rezultatul arată clar că sunt afișate ultimele două documente din colecție. Prin urmare, am arătat în mod clar că pentru a prelua ultimele documente „n” din colecție, putem sorta documentele în ordine descrescătoare și apoi putem utiliza clauza limită pentru a returna numărul „n” de documente necesare.
Notă : dacă căutarea se efectuează pe un șir care depășește 38.000 de caractere, nu va afișa rezultatele corecte.
Rezumat:
- Potrivirea modelului poate fi realizată de operatorul $ regex. Acest operator poate fi folosit pentru a găsi anumite șiruri din colecție.
- Simbolul și $ pot fi utilizate pentru căutări de text exacte, folosind pentru a vă asigura că șirul începe cu un anumit caracter și $ este utilizat pentru a se asigura că șirul se termină cu un anumit caracter.
- „I” împreună cu operatorul $ regex pot fi folosite pentru a specifica insensibilitatea cu majuscule, astfel încât șirurile să poată fi căutate indiferent dacă sunt minuscule sau majuscule.
- Delimitatorii // pot fi folosiți și pentru potrivirea modelelor.
- Utilizați o combinație de sortare și funcția de limitare pentru a returna ultimele n documente din colecție. Funcția de sortare poate fi utilizată pentru a returna documentele în ordine descrescătoare, după care clauza limită poate fi utilizată pentru a limita numărul de documente returnate.