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