MongoDB reguláris kifejezés (Regex) példákkal

Tartalomjegyzék:

Anonim

A szokásos kifejezéseket a mintaillesztéshez használják, amely alapvetően a dokumentumokon belüli megállapítási húrokra vonatkozik.

Előfordulhat, hogy a gyűjteményben lévő dokumentumok lekérésekor nem biztos, hogy pontosan tudja, hogy mi a pontos Field érték. Ezért használhatunk reguláris kifejezéseket az adatok lekérésének elősegítésére a keresési mintáknak megfelelő minták alapján.

Ebben az oktatóanyagban megtudhatja -

  • A $ regex operátor használata a Mintaillesztéshez
  • Mintaillesztés a $ opciókkal
  • Mintaillesztés a regex operátor nélkül
  • Utolsó 'n' dokumentumok lekérése egy gyűjteményből

A $ regex operátor használata a Mintaillesztéshez

A MongoDB regex operátora a karakterláncok keresésére szolgál a gyűjteményben. A következő példa bemutatja, hogyan lehet ezt megtenni.

Tegyük fel, hogy ugyanazon Employee gyűjteményünk van, amelynek a mezőnevei "Employeeid" és "EmployeeName". Tegyü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 a regex operátort használtuk a keresési feltételek megadásához.

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

Kód Magyarázat:

  1. Itt szeretnénk megtalálni az összes alkalmazott nevet, amelyekben szerepel a „Gu” karakter. Ezért megadjuk a $ regex operátort a „Gu” keresési feltételeinek meghatározásához
  2. A printjson segítségével minden olyan dokumentum kinyomtatható, amelyet a lekérdezés jobban visszaad.

A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:

Kimenet:

A kimenet világosan mutatja, hogy azok a dokumentumok, amelyekben az Employee Name tartalmazza a „Gu” karaktereket, visszaküldődnek.

Ha feltételezzük, hogy a gyűjteményeden vannak a következő dokumentumok, egy további dokumentummal, amely az alkalmazott nevét "Guru999" néven tartalmazta. Ha a keresési feltételeket "Guru99" néven adta meg, akkor a "Guru999" feliratú dokumentumot is visszaadja. De tegyük fel, hogy ha nem ezt akarjuk, és csak a "Guru99" -vel szeretnénk visszaadni a dokumentumot. Akkor ezt megtehetjük pontos mintaillesztéssel. Pontos mintaillesztéshez a és $ karaktereket fogjuk használni. Hozzáadjuk a karaktert a karakterlánc elejéhez és a $ -t a karakterlánc végéhez.

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ázat:

  1. Itt a keresési feltételekben a és $ karaktereket használjuk. A segítségével megbizonyosodhatunk arról, hogy a karakterlánc egy bizonyos karakterrel kezdődik, a $ pedig arra, hogy a karakterlánc egy bizonyos karakterrel végződjön. Tehát amikor a kód végrehajtódik, csak a "Guru99" nevű karakterláncot fogja lekérni.
  2. A printjson segítségével minden olyan dokumentum kinyomtatható, amelyet a lekérdezés jobban visszaad.

A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:

Kimenet:

A kimenetben jól látható, hogy a "Guru99" karakterlánc be van töltve.

Mintaillesztés a $ opciókkal

A regex operátor használatakor további lehetőségeket is megadhat a $ options kulcsszó használatával. Tegyük fel például, hogy meg akarta találni az összes olyan dokumentumot, amelyen alkalmazott neve neve „Gu” volt, függetlenül attól, hogy a kis- és nagybetűk megkülönböztetettek-e. Ha ilyen eredményre van szükség, akkor a $ opciókat kell használnunk a kis- és nagybetűk érzékenységének paraméterével.

A következő példa bemutatja, hogyan lehet ezt megtenni.

Tegyük fel, hogy ugyanazon Employee gyűjteményünk van, amelynek a mezőnevei "Employeeid" és "EmployeeName".

Tegyü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 ugyanazt a lekérdezést futtatjuk, mint az előző témában, soha nem látnánk az eredményben a "GURU99" felirattal ellátott dokumentumot. Annak biztosítására, hogy ez bekerüljön az eredménykészletbe, hozzá kell adnunk a $ options "I" paramétert.

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

Kód Magyarázat:

  1. Az $ I 'I' paraméterrel (ami kis- és nagybetűkkel szembeni érzékenységet jelent) megadja, hogy a keresést akkor is el akarjuk végezni, ha kis vagy nagy betűkkel találjuk a 'Gu' betűket.

A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:

Kimenet:

  1. A kimenet világosan mutatja, hogy annak ellenére, hogy egy dokumentum nagybetűvel „Gu”, a dokumentum mégis megjelenik az eredményhalmazban.

Mintaillesztés a regex operátor nélkül

A regex operátor nélkül is végezhetünk mintaillesztést. A következő példa bemutatja, hogyan lehet ezt megtenni.

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

Kód Magyarázat:

  1. A "//" opciók alapvetően azt jelentik, hogy megadják a keresési feltételeket ezeken az elválasztókon belül. Ezért megadjuk a / Gu / parancsot, hogy újra megtaláljuk azokat a dokumentumokat, amelyeknél a „Gu” szerepel az EmployeeName-ben.

A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:

Kimenet:

A kimenet világosan mutatja, hogy azok a dokumentumok, amelyekben az Employee Name tartalmazza a „Gu” karaktereket, visszaküldődnek.

Utolsó 'n' dokumentumok lekérése egy gyűjteményből

Különböző módon lehet megszerezni a gyűjtemény utolsó n dokumentumát.

Nézzük meg a következő lépések egyikét

A következő példa bemutatja, hogyan lehet ezt megtenni.

Tegyük fel, hogy ugyanazon Employee gyűjteményünk van, amelynek a mezőnevei "Employeeid" és "EmployeeName".

Tegyü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ázat:

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 rendezi, így az utolsó dokumentum lesz az első megjelenített dokumentum.

2) Ezután használja a limit záradékot, hogy csak a kívánt rekordok számát jelenítse meg. Itt állítottuk be a (2) korlátozási záradékot, így beolvassa az utolsó két dokumentumot.

A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:

Kimenet:

A kimenet világosan mutatja, hogy a gyűjtemény utolsó két dokumentuma megjelenik. Ennélfogva egyértelműen megmutattuk, hogy a gyűjtemény utolsó „n” dokumentumainak lekéréséhez először csökkenő sorrendben rendezhetjük a dokumentumokat, majd a korlátozási záradékkal visszaadhatjuk a szükséges „n” számú dokumentumot.

Megjegyzés : Ha a keresést olyan karaktersorozaton hajtják végre, amely meghaladja a 38 000 karaktert, akkor az nem a megfelelő eredményeket jeleníti meg.

Összegzés:

  • A minta illesztését a $ regex operátor érheti el. Ez az operátor használható a gyűjtemény bizonyos húrjainak megkeresésére.
  • A és a $ szimbólum használható a pontos szöveges keresésekre, a segítségével pedig annak biztosítására, hogy a karakterlánc egy bizonyos karakterrel kezdődjön, 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 együtt használható a kis- és nagybetűk érzéketlenségének megadására, hogy a húrok kis- vagy nagybetűkkel kereshetők legyenek.
  • A // elválasztók a mintaillesztéshez is használhatók.
  • A rendezés és a limit függvény kombinációjával adja vissza a gyűjtemény utolsó n dokumentumát. A rendezés funkcióval a dokumentumok csökkenő sorrendben adhatók vissza, majd a korlátozási záradék korlátozhatja a visszaküldött dokumentumok számát.