MongoDB Reguláris kifejezés (Regex) példákkal
A reguláris kifejezéseket mintaillesztésre használjuk, ami alapvetően a dokumentumokon belüli keresési karakterláncokra vonatkozik.
Előfordulhat, hogy egy gyűjtemény dokumentumainak lekérésekor nem tudja pontosan, hogy pontosan mi a keresendő Mező érték. Ezért használhatunk reguláris kifejezéseket az adatok lekéréséhez a mintaillesztő keresési értékek alapján.
$regex operátor használata a mintaillesztéshez
A regex operátor be MongoDB adott karakterláncok keresésére szolgál a gyűjteményben. A következő példa bemutatja, hogyan lehet ezt megtenni.
Tételezzük fel, hogy ugyanazzal az Employee gyűjteményünkkel rendelkezünk, amelynek mezői neve „Employeeid” és „EmployeeName”. Tételezzük fel azt is, hogy a következő dokumentumok vannak gyűjteményünkben.
Munkavállalói azonosító | Alkalmazott Neve |
---|---|
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Itt az alábbi kódban regex operátort használtunk a keresési feltételek megadásához.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kód magyarázata:
- Itt meg akarjuk találni az összes alkalmazott nevét, amelyben a „Gu” karakter szerepel. Ezért megadjuk a $regex operátort a 'Gu' keresési feltételeinek meghatározásához
- A printjson a lekérdezés által visszaadott dokumentumok jobb kinyomtatására szolgál.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
A kimenet egyértelműen mutatja, hogy azok a dokumentumok, amelyekben az Employee Name tartalmazza a „Gu” karaktereket, visszaküldésre kerülnek.
Tegyük fel, hogy a gyűjteményében a következő dokumentumok találhatók egy további dokumentummal, amely az alkalmazott nevét „Guru999”-ként tartalmazza. Ha a keresési feltételeket „Guru99”-ként adja meg, akkor a „Guru999”-et tartalmazó dokumentumot is visszaadja. De tegyük fel, ha nem ezt akartuk, és csak a „Guru99”-el akartuk visszaküldeni a dokumentumot. Akkor ezt pontos mintaillesztéssel megtehetjük. A pontos mintaillesztéshez a ^ és $ karaktert használjuk. A karakterlánc elejére a ^ karaktert, a sztring végére pedig $ karaktert adjuk.
Munkavállalói azonosító | Alkalmazott Neve |
---|---|
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
A következő példa bemutatja, hogyan lehet ezt megtenni.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Kód magyarázata:
- Itt a keresési feltételekben a ^ és $ karaktert használjuk. A ^ arra szolgál, hogy megbizonyosodjon arról, hogy a karakterlánc egy bizonyos karakterrel kezdődik, a $ pedig arra szolgál, hogy a karakterlánc egy bizonyos karakterrel végződjön. Tehát amikor a kód lefut, csak a „Guru99” nevű karakterláncot fogja lekérni.
- A printjson a lekérdezés által visszaadott dokumentumok jobb kinyomtatására szolgál.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
A kimeneten jól látható, hogy a „Guru99” karakterlánc lekérésre kerül.
Mintaillesztés a $opciókkal
A reguláris kifejezés operátor használatakor további lehetőségeket is megadhat a $opciók kulcsszó. Tegyük fel például, hogy meg akarja találni az összes olyan dokumentumot, amelynek alkalmazotti nevében „Gu” szerepel, függetlenül attól, hogy a kis- és nagybetűk megkülönböztetik-e, vagy nem. Ha ilyen eredményre vágyunk, akkor a $opciók kis- és nagybetű-érzékenységi paraméterrel.
A következő példa bemutatja, hogyan lehet ezt megtenni.
Tételezzük fel, hogy ugyanazzal az Employee gyűjteményünkkel rendelkezünk, amelynek mezői neve „Employeeid” és „EmployeeName”.
Tételezzük fel azt is, hogy a következő dokumentumok vannak gyűjteményünkben.
Munkavállalói azonosító | Alkalmazott Neve |
---|---|
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Ha most ugyanazt a lekérdezést futtatjuk, mint az előző témakörben, akkor soha nem látjuk a „GURU99” dokumentumot az eredményben. Annak biztosítására, hogy ez bekerüljön az eredménykészletbe, hozzá kell adnunk az $options „I” paramétert.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Kód magyarázata:
- Az 'I' paraméterrel rendelkező $options (ami a kis- és nagybetűk érzéketlenségét jelenti) azt határozza meg, hogy a keresést mindegy, hogy kis- vagy nagybetűvel találjuk-e a 'Gu' betűket, végrehajtani akarjuk.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
- A kimeneten jól látható, hogy bár egy dokumentum nagybetűje „Gu” , a dokumentum továbbra is megjelenik az eredménykészletben.
Mintaillesztés a regex operátor nélkül
A mintaillesztést a regex operátor nélkül is elvégezhetjük. A következő példa bemutatja, hogyan lehet ezt megtenni.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kód magyarázata:
- A „//” opciók alapvetően a keresési feltételek megadását jelentik ezeken a határolókon belül. Ezért megadjuk a /Gu/ értéket, hogy újra megtaláljuk azokat a dokumentumokat, amelyeknek az EmployeeName-jában szerepel a „Gu” szó.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
A kimenet egyértelműen mutatja, hogy azok a dokumentumok, amelyekben az Employee Name tartalmazza a „Gu” karaktereket, visszaküldésre kerülnek.
Utolsó „n” dokumentum lekérése egy gyűjteményből
Különféle módon lehet megszerezni a gyűjtemény utolsó n dokumentumát.
Nézzük meg az egyik módot a következő lépésekkel
A következő példa bemutatja, hogyan lehet ezt megtenni.
Tételezzük fel, hogy ugyanazzal az Employee gyűjteményünkkel rendelkezünk, amelynek mezői neve „Employeeid” és „EmployeeName”.
Tételezzük fel azt is, hogy a következő dokumentumok vannak gyűjteményünkben:
Munkavállalói azonosító | Alkalmazott Neve |
---|---|
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Kód magyarázata:
1) A dokumentumok lekérdezésekor használja a rendezés funkciót a rekordok fordított sorrendbe rendezéséhez a gyűjtemény _id mezőértéke alapján. A -1 alapvetően azt jelzi, hogy a dokumentumokat fordított vagy csökkenő sorrendben kell rendezni, hogy az utolsó dokumentum legyen az első megjelenítendő dokumentum.
2) Ezután használja a limitzáradékot a kívánt rekordok számának megjelenítéséhez. Itt beállítottuk a limitzáradékot (2), így az utolsó két dokumentumot fogja lekérni.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
A kimeneten jól látható, hogy a gyűjtemény utolsó két dokumentuma jelenik meg. Ezért világosan megmutattuk, hogy a gyűjtemény utolsó „n” dokumentumának lekéréséhez először a dokumentumokat csökkenő sorrendbe rendezhetjük, majd a limitzáradékkal visszaadhatjuk a szükséges „n” számú dokumentumot.
Megjegyzések: Ha a keresést mondjuk 38,000 XNUMX karakternél hosszabb karakterláncon hajtják végre, akkor nem a megfelelő eredményeket jeleníti meg.
Összegzésként
- A mintaillesztés a $regex operátorral érhető el. Ez az operátor használható bizonyos karakterláncok keresésére a gyűjteményben.
- A ^ és a $ szimbólum használható a pontos szöveges keresésekhez, miközben a ^ jelet arra használjuk, hogy megbizonyosodjunk arról, hogy a karakterlánc egy bizonyos karakterrel kezdődik, a $ pedig annak biztosítására, hogy a karakterlánc egy bizonyos karakterrel végződjön.
- Az 'i' és a $regex operátor használható a kis- és nagybetűk érzéketlenségének megadására, így a karakterláncok között lehet keresni, akár kis-, akár nagybetűsek.
- A // határolójelek mintaillesztésre is használhatók.
- Használja a rendezés és a limit függvény kombinációját a gyűjtemény utolsó n dokumentumának visszaadásához. A rendezés funkcióval a dokumentumokat csökkenő sorrendben lehet visszaküldeni, majd a limitzáradékkal korlátozni lehet a visszaküldendő dokumentumok számát.