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.

$regex használatával Operator mintaillesztéshez

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

Kód magyarázata:

  1. 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
  2. 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:

$regex használatával Operator mintaillesztéshez

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.

$regex használatával Operator mintaillesztéshez

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

Kód magyarázata:

  1. 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.
  2. 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:

$regex használatával Operator mintaillesztéshez

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.

Mintaillesztés a $opciókkal

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

Kód magyarázata:

  1. 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:

Mintaillesztés a $opciókkal

  1. 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.

Mintaillesztés a Regex nélkül Operator

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

Kód magyarázata:

  1. 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:

Mintaillesztés a Regex nélkül Operator

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

Az utolsó „n” dokumentumok lekérése egy gyűjteményből

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:

Az utolsó „n” dokumentumok lekérése egy gyűjteményből

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.