MongoDB regulārā izteiksme (Regex) ar piemēriem

Satura rādītājs:

Anonim

Parastās izteiksmes tiek izmantotas modeļu saskaņošanai, kas galvenokārt attiecas uz secinājumiem dokumentos.

Dažreiz, izgūstot dokumentus kolekcijā, jūs, iespējams, precīzi nezināt, kuru precīzu lauka vērtību meklēt. Tādējādi var izmantot regulāras izteiksmes, lai palīdzētu iegūt datus, pamatojoties uz modeļu atbilstību meklēšanas vērtībām.

Šajā apmācībā jūs uzzināsiet -

  • Operatora $ regex izmantošana Pattern saskaņošanai
  • Pattern saskaņošana ar opcijām $
  • Rakstu saskaņošana bez regex operatora
  • Notiek pēdējo 'n' dokumentu iegūšana no kolekcijas

Operatora $ regex izmantošana Pattern saskaņošanai

Regex operators MongoDB tiek izmantots, lai meklētu konkrētas virknes kolekcijā. Šis piemērs parāda, kā to var izdarīt.

Pieņemsim, ka mums ir tā pati darbinieku kolekcija, kurai ir lauku nosaukumi “Employeeid” un “EmployeeName”. Pieņemsim arī, ka mūsu kolekcijā ir šādi dokumenti.

Darbinieka ID darbinieka vārds
22 NewMartin
2 Mohan
3 Džo
4 MohanR
100 Guru99
6 Gurang

Šeit zemāk esošajā kodā esam izmantojuši regex operatoru, lai norādītu meklēšanas kritērijus.

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

Koda skaidrojums:

  1. Šeit mēs vēlamies atrast visus darbinieku vārdus, kuros ir rakstzīmes “Gu”. Tādējādi mēs norādām operatoru $ regex, lai definētu meklēšanas kritērijus “Gu”
  2. Printjson tiek izmantots, lai labāk izdrukātu katru dokumentu, kuru vaicājums atdod.

Ja komanda tiek veiksmīgi izpildīta, tiks parādīta šāda izeja:

Izeja:

Izeja skaidri parāda, ka tiek atgriezti tie dokumenti, kuros darbinieka vārds satur “Gu” rakstzīmes.

Ja pieņemsim, ka jūsu kolekcijā ir šādi dokumenti ar papildu dokumentu, kurā darbinieka vārds bija "Guru999". Ja meklēšanas kritērijus ievadījāt kā "Guru99", tas atgriezīs arī dokumentu, kurā bija "Guru999". Bet pieņemsim, ja mēs to nevēlējāmies un tikai gribējām dokumentu atdot ar "Guru99". Tad mēs to varam izdarīt ar precīzu modeļu saskaņošanu. Lai veiktu precīzu modeļu atbilstību, mēs izmantosim rakstzīmes un $. Mēs pievienosim rakstzīmi virknes sākumā un $ virknes beigās.

Darbinieka ID darbinieka vārds
22 NewMartin
2 Mohan
3 Džo
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Šis piemērs parāda, kā to var izdarīt.

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

Koda skaidrojums:

  1. Šeit meklēšanas kritērijos mēs izmantojam rakstzīmes un $. Tiek izmantots, lai pārliecinātos, ka virkne sākas ar noteiktu rakstzīmi, un $ tiek izmantots, lai nodrošinātu, ka virkne beidzas ar noteiktu rakstzīmi. Tātad, kad kods tiks izpildīts, tas iegūs tikai virkni ar nosaukumu "Guru99".
  2. Printjson tiek izmantots, lai labāk izdrukātu katru dokumentu, kuru vaicājums atdod.

Ja komanda tiek veiksmīgi izpildīta, tiks parādīta šāda izeja:

Izeja:

Izejā ir skaidri redzams, ka tiek ievilkta virkne "Guru99".

Pattern saskaņošana ar opcijām $

Izmantojot regex operatoru, var nodrošināt arī papildu opcijas, izmantojot atslēgvārdu $ options . Piemēram, pieņemsim, ka vēlaties atrast visus dokumentus, kuru darbinieka nosaukumā bija “Gu”, neatkarīgi no tā, vai tie ir reģistrjutīgi vai nejutīgi. Ja šāds rezultāts ir vēlams, mums jāizmanto opcijas $ ar parametru nejutīguma reģistrs.

Šis piemērs parāda, kā to var izdarīt.

Pieņemsim, ka mums ir tā pati darbinieku kolekcija, kurai ir lauku nosaukumi “Employeeid” un “EmployeeName”.

Pieņemsim arī, ka mūsu kolekcijā ir šādi dokumenti.

Darbinieka ID darbinieka vārds
22 NewMartin
2 Mohan
3 Džo
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Tagad, ja mēs izpildām to pašu vaicājumu kā iepriekšējā tēmā, mēs nekad neredzētu rezultātu ar dokumentu "GURU99". Lai nodrošinātu, ka tas tiek iekļauts rezultātu komplektā, mums jāpievieno parametrs $ options "I".

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

Koda skaidrojums:

  1. $ Opcijas ar parametru “I” (tas nozīmē, ka nejutīgums ir reģistrjutīgs) norāda, ka mēs vēlamies veikt meklēšanu neatkarīgi no tā, vai burtus “Gu” atrodam ar mazajiem vai lielajiem burtiem.

Ja komanda tiek veiksmīgi izpildīta, tiks parādīta šāda izeja:

Izeja:

  1. Izeja skaidri parāda, ka, pat ja vienam dokumentam ir lielais burts “Gu”, dokuments tomēr tiek parādīts rezultātu kopā.

Rakstu saskaņošana bez regex operatora

Var veikt arī modeļu saskaņošanu bez regex operatora. Šis piemērs parāda, kā to var izdarīt.

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

Koda skaidrojums:

  1. Opcijas "//" būtībā nozīmē norādīt meklēšanas kritērijus šajos atdalītājos. Tādējādi mēs norādām / Gu /, lai atkal atrastu tos dokumentus, kuru EmployeeName ir “Gu”.

Ja komanda tiek veiksmīgi izpildīta, tiks parādīta šāda izeja:

Izeja:

Izeja skaidri parāda, ka tiek atgriezti tie dokumenti, kuros darbinieka vārds satur “Gu” rakstzīmes.

Notiek pēdējo 'n' dokumentu iegūšana no kolekcijas

Ir dažādi veidi, kā iegūt pēdējos n dokumentus kolekcijā.

Apskatīsim vienu no veidiem, veicot šādas darbības

Šis piemērs parāda, kā to var izdarīt.

Pieņemsim, ka mums ir tā pati darbinieku kolekcija, kurai ir lauku nosaukumi “Employeeid” un “EmployeeName”.

Pieņemsim, ka mūsu kolekcijā ir šādi dokumenti:

Darbinieka ID darbinieka vārds
22 NewMartin
2 Mohan
3 Džo
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Koda skaidrojums:

1) Vaicājot par dokumentiem, izmantojiet funkciju Kārtot, lai kārtotu ierakstus apgrieztā secībā, pamatojoties uz kolekcijas lauka vērtību _id. -1 būtībā norāda dokumentu šķirošanu apgrieztā secībā vai dilstošā secībā, lai pēdējais dokuments kļūtu par pirmo parādāmo dokumentu.

2) Pēc tam izmantojiet ierobežojuma klauzulu, lai tikai parādītu vēlamo ierakstu skaitu. Šeit mēs esam iestatījuši ierobežojuma klauzulu (2), tāpēc tā iegūs pēdējos divus dokumentus.

Ja komanda tiek veiksmīgi izpildīta, tiks parādīta šāda izeja:

Izeja:

Izeja skaidri parāda, ka tiek parādīti pēdējie divi kolekcijas dokumenti. Tāpēc mēs esam skaidri parādījuši, ka, lai ielādētu pēdējos “n” dokumentus kolekcijā, mēs vispirms varam kārtot dokumentus dilstošā secībā un pēc tam izmantot ierobežojuma klauzulu, lai atgrieztu nepieciešamo dokumentu “n” skaitu.

Piezīme : Ja meklēšana tiek veikta virknē, kas pārsniedz 38 000 rakstzīmes, tā neparādīs pareizos rezultātus.

Kopsavilkums:

  • Modeļa saskaņošanu var panākt ar operatoru $ regex. Šo operatoru var izmantot, lai atrastu noteiktas virknes kolekcijā.
  • Simbolus un $ var izmantot precīziem teksta meklējumiem, izmantojot ^, lai pārliecinātos, ka virkne sākas ar noteiktu rakstzīmi, un $, ko izmanto, lai nodrošinātu, ka virkne beidzas ar noteiktu rakstzīmi.
  • “I” kopā ar operatoru $ regex var izmantot, lai norādītu nejutīgumu pret lielajiem burtiem, lai virknes varētu meklēt neatkarīgi no tā, vai tās ir mazie vai lielie burti.
  • Atdalītājus // var izmantot arī modeļu saskaņošanai.
  • Lai atgrieztu pēdējos n kolekcijas dokumentus, izmantojiet funkciju Kārtot un Ierobežojums. Kārtošanas funkciju var izmantot, lai dokumentus atgrieztu dilstošā secībā, pēc kura ierobežojuma klauzulu var izmantot, lai ierobežotu atdodamo dokumentu skaitu.