Reguliarūs posakiai naudojami šablonų derinimui, kurie iš esmės skirti dokumento radinių eilutėms.
Kartais, kai gaunate dokumentus kolekcijoje, galite tiksliai nežinoti, kokios tikslios lauko vertės ieškoti. Taigi galima naudoti įprastus posakius, kad būtų lengviau gauti duomenis pagal modelius, atitinkančius paieškos reikšmes.
Šioje pamokoje sužinosite -
- Naudojant operatorių $ regex šablonų derinimui
- Šablonas derinamas su $ parinktimis
- Rašto derinimas be regex operatoriaus
- Gaunami paskutiniai „n“ dokumentai iš kolekcijos
Naudojant operatorių $ regex šablonų derinimui
„Regex“ operatorius „MongoDB“ naudojamas ieškant konkrečių stygų kolekcijoje. Šis pavyzdys parodo, kaip tai galima padaryti.
Tarkime, kad turime tą pačią „Employee“ kolekciją, kurios laukų pavadinimai yra „Employeeid“ ir „EmployeeName“. Tarkime, kad mūsų kolekcijoje yra šie dokumentai.
Darbuotojo ID | Darbuotojo vardas |
22 | NewMartin |
2 | Mohanas |
3 | Džo |
4 | MohanR |
100 | Guru99 |
6 | Gurangas |
Čia žemiau esančiame kode mes naudojome regex operatorių, norėdami nurodyti paieškos kriterijus.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kodo paaiškinimas:
- Čia norime rasti visus darbuotojų vardus, kuriuose yra simboliai „Gu“. Taigi mes nurodome operatorių $ regex, kad apibrėžtume „Gu“ paieškos kriterijus
- „Printjson“ naudojamas spausdinti kiekvieną dokumentą, kurį užklausa grąžina geriau.
Jei komanda sėkmingai vykdoma, bus rodoma ši išvestis:
Išvestis:
Išvestis aiškiai parodo, kad grąžinami tie dokumentai, kuriuose darbuotojo varde yra „Gu“ ženklai.
Jei tarkime, kad jūsų kolekcijoje yra šie dokumentai su papildomu dokumentu, kuriame darbuotojo vardas buvo „Guru999“. Jei paieškos kriterijus įvesite kaip „Guru99“, jis taip pat grąžins dokumentą, kuriame buvo „Guru999“. Bet tarkime, jei mes to nenorėjome ir norėjome grąžinti dokumentą tik su „Guru99“. Tada mes galime tai padaryti tiksliai suderinę modelį. Norėdami tiksliai suderinti modelį, naudosime simbolius ir $. Stygos pradžioje pridėsime simbolį ir eilutės pabaigoje - $.
Darbuotojo ID | Darbuotojo vardas |
22 | NewMartin |
2 | Mohanas |
3 | Džo |
4 | MohanR |
100 | Guru99 |
6 | Gurangas |
8 | Guru999 |
Šis pavyzdys parodo, kaip tai galima padaryti.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Kodo paaiškinimas:
- Čia paieškos kriterijuose naudojame simbolius ir $. Naudojamas norint įsitikinti, kad eilutė prasideda nuo tam tikro simbolio, o $ naudojama siekiant užtikrinti, kad eilutė baigtųsi tam tikru simboliu. Taigi, kai kodas bus vykdomas, jis atneš tik eilutę pavadinimu „Guru99“.
- „Printjson“ naudojamas spausdinti kiekvieną dokumentą, kurį užklausa grąžina geriau.
Jei komanda sėkmingai vykdoma, bus rodoma ši išvestis:
Išvestis:
Išvestyje aiškiai matoma, kad gaunama eilutė „Guru99“.
Šablonas derinamas su $ parinktimis
Naudojant regex operatorių, taip pat galima pateikti papildomų parinkčių naudojant raktą $ options . Pvz., Tarkime, kad norėjote rasti visus dokumentus, kurių darbuotojo varde buvo „Gu“, neatsižvelgiant į tai, ar jie neskyrė didžiųjų ir mažųjų raidžių. Jei norima tokio rezultato, turime naudoti $ parinktis su didžiųjų ir mažų raidžių parametru.
Šis pavyzdys parodo, kaip tai galima padaryti.
Tarkime, kad turime tą pačią „Employee“ kolekciją, kurios laukų pavadinimai yra „Employeeid“ ir „EmployeeName“.
Tarkime, kad mūsų kolekcijoje yra šie dokumentai.
Darbuotojo ID | Darbuotojo vardas |
22 | NewMartin |
2 | Mohanas |
3 | Džo |
4 | MohanR |
100 | Guru99 |
6 | Gurangas |
7 | GURU99 |
Dabar, jei vykdysime tą pačią užklausą kaip ir paskutinėje temoje, rezultate niekada nematysime dokumento su „GURU99“. Norėdami įsitikinti, kad tai yra rezultatų rinkinyje, turime pridėti parametrą $ options „I“.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Kodo paaiškinimas:
- Parinktys $ su parametru „I“ (tai reiškia nejautrumą didžiosioms ir mažosioms raidėms) nurodo, kad mes norime atlikti paiešką, nesvarbu, ar mažąsias ar dideles raides rasime „Gu“.
Jei komanda sėkmingai vykdoma, bus rodoma ši išvestis:
Išvestis:
- Išvestis aiškiai parodo, kad nors vieno dokumento raidė yra „Gu“, dokumentas vis tiek rodomas rezultatų rinkinyje.
Rašto derinimas be regex operatoriaus
Taip pat galima atlikti šablonų derinimą be regex operatoriaus. Šis pavyzdys parodo, kaip tai galima padaryti.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kodo paaiškinimas:
- Parinktys „//“ iš esmės reiškia nurodyti paieškos kriterijus šiuose ribotuvuose. Taigi mes nurodome / Gu /, kad vėl rastume tuos dokumentus, kurių „EmployeeName“ yra „Gu“.
Jei komanda sėkmingai vykdoma, bus rodoma ši išvestis:
Išvestis:
Išvestis aiškiai parodo, kad grąžinami tie dokumentai, kuriuose darbuotojo varde yra „Gu“ ženklai.
Gaunami paskutiniai „n“ dokumentai iš kolekcijos
Yra keli būdai, kaip gauti paskutinius n dokumentų kolekcijoje.
Pažvelkime į vieną iš būdų atlikdami šiuos veiksmus
Šis pavyzdys parodo, kaip tai galima padaryti.
Tarkime, kad turime tą pačią „Employee“ kolekciją, kurios laukų pavadinimai yra „Employeeid“ ir „EmployeeName“.
Tarkime, kad mūsų kolekcijoje yra šie dokumentai:
Darbuotojo ID | Darbuotojo vardas |
22 | NewMartin |
2 | Mohanas |
3 | Džo |
4 | MohanR |
100 | Guru99 |
6 | Gurangas |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Kodo paaiškinimas:
1) Užklausdami dokumentus, naudokite rūšiavimo funkciją, kad surūšiuotumėte įrašus atvirkštine tvarka, atsižvelgdami į kolekcijos lauko reikšmę _id. -1 iš esmės nurodo rūšiuoti dokumentus atvirkštine arba mažėjančia tvarka, kad paskutinis dokumentas taptų pirmuoju rodomu dokumentu.
2) Tada naudokite apribojimo sąlygą, kad tik parodytumėte norimą įrašų skaičių. Čia mes nustatėme ribinę sąlygą (2), taigi ji atneš du paskutinius dokumentus.
Jei komanda sėkmingai vykdoma, bus rodoma ši išvestis:
Išvestis:
Išvestis aiškiai parodo, kad rodomi du paskutiniai kolekcijos dokumentai. Taigi mes aiškiai parodėme, kad norėdami paimti paskutinius „n“ kolekcijos dokumentus, pirmiausia galime rūšiuoti dokumentus mažėjančia tvarka ir tada naudoti ribinę sąlygą, kad grąžintume „n“ reikalingą dokumentų skaičių.
Pastaba : jei paieška atliekama eilutėje, kuri yra didesnė nei, tarkime, 38 000 simbolių, ji nerodys tinkamų rezultatų.
Santrauka:
- Modelių derinimą gali pasiekti operatorius $ regex. Šis operatorius gali būti naudojamas surandant tam tikras eilutes kolekcijoje.
- Simboliai ir $ gali būti naudojami tikslioms teksto paieškoms, naudojant ^, norint įsitikinti, kad eilutė prasideda nuo tam tikro simbolio, o $ naudojama norint užtikrinti, kad eilutė baigtųsi tam tikru simboliu.
- „I“ ir „$ regex“ operatorius gali būti naudojami didžiosioms ir mažosioms raidėms nustatyti, kad eilučių būtų galima ieškoti, nesvarbu, ar jos yra mažosios, ar didžiosios.
- Skyrikliai // taip pat gali būti naudojami modelių derinimui.
- Norėdami grąžinti paskutinius n kolekcijos dokumentus, naudokite rūšiavimo ir ribos funkcijų derinį. Rūšiavimo funkciją galima naudoti norint grąžinti dokumentus mažėjančia tvarka, po kurios ribinė išlyga gali būti naudojama grąžinant grąžinamų dokumentų skaičių.