MongoDB Regular Expression (Regex) s primeri

Kazalo:

Anonim

Regularni izrazi se uporabljajo za ujemanje vzorcev, kar je v bistvu za nize ugotovitev v dokumentih.

Včasih pri pridobivanju dokumentov v zbirki morda ne boste natančno vedeli, kakšno natančno vrednost polja želite iskati. Zato lahko uporabimo regularne izraze za pomoč pri pridobivanju podatkov na podlagi vzorcev, ki ustrezajo iskalnim vrednostim.

V tej vadnici boste izvedeli -

  • Uporaba operatorja $ regex za ujemanje vzorcev
  • Vzorec se ujema z $ možnostmi
  • Ujemanje vzorcev brez operaterja regularnih izrazov
  • Pridobivanje zadnjih 'n' dokumentov iz zbirke

Uporaba operatorja $ regex za ujemanje vzorcev

Operator regularnega izraza v MongoDB se uporablja za iskanje določenih nizov v zbirki. Naslednji primer prikazuje, kako je to mogoče storiti.

Predpostavimo, da imamo isto zbirko zaposlenih, ki ima imeni polji "Employeeid" in "EmployeeName". Predpostavimo tudi, da imamo v svoji zbirki naslednje dokumente.

ID zaposlenega ime zaposlenega
22. NewMartin
2. Mohan
3. Joe
4. MohanR
100 Guru99
6. Gurang

Tu v spodnji kodi smo za določanje iskalnih kriterijev uporabili operater regex.

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

Razlaga kode:

  1. Tu želimo najti vsa imena zaposlenih, ki vsebujejo znake 'Gu'. Zato določimo operator $ regex za določitev iskalnih meril za 'Gu'
  2. Printjson se uporablja za boljši tisk vsakega dokumenta, ki ga poizvedba vrne.

Če se ukaz uspešno izvede, se prikaže naslednji izhod:

Izhod:

Rezultat jasno kaže, da se vrnejo tisti dokumenti, v katerih ime zaposlenega vsebuje znake 'Gu'.

Če domnevate, da ima vaša zbirka naslednje dokumente z dodatnim dokumentom, ki je vseboval ime zaposlenega kot "Guru999". Če ste iskalna merila vnesli kot "Guru99", bo vrnil tudi dokument z "Guru999". A predpostavimo, da če tega nismo želeli in smo dokument želeli vrniti samo z "Guru99". Potem lahko to storimo z natančnim ujemanjem vzorcev. Za natančno ujemanje vzorcev bomo uporabili znaka in $. Na začetku niza bomo dodali znak in na koncu niza $.

ID zaposlenega ime zaposlenega
22. NewMartin
2. Mohan
3. Joe
4. MohanR
100 Guru99
6. Gurang
8. Guru999

Naslednji primer prikazuje, kako je to mogoče storiti.

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

Razlaga kode:

  1. Tukaj v iskalnih kriterijih uporabljamo znak in $. Se uporablja za zagotovitev, da se niz začne z določenim znakom, $ pa za zagotovitev, da se niz konča z določenim znakom. Torej, ko se koda izvede, bo prinesla samo niz z imenom "Guru99".
  2. Printjson se uporablja za boljši tisk vsakega dokumenta, ki ga poizvedba vrne.

Če se ukaz uspešno izvede, se prikaže naslednji izhod:

Izhod:

V izhodu je jasno vidno, da je pridobljen niz "Guru99".

Vzorec se ujema z $ možnostmi

Pri uporabi operaterja regularnih izrazov lahko z uporabo ključne besede $ options zagotovite tudi dodatne možnosti . Recimo, da ste na primer želeli najti vse dokumente, ki so imeli v imenu zaposlenega »Gu«, ne glede na to, ali je velika ali majhna. Če želimo takšen rezultat, moramo uporabiti možnosti $ s parametrom neobčutljivosti.

Naslednji primer prikazuje, kako je to mogoče storiti.

Predpostavimo, da imamo isto zbirko zaposlenih, ki ima imeni polji "Employeeid" in "EmployeeName".

Predpostavimo tudi, da imamo v svoji zbirki naslednje dokumente.

ID zaposlenega ime zaposlenega
22. NewMartin
2. Mohan
3. Joe
4. MohanR
100 Guru99
6. Gurang
7. GURU99

Zdaj, če zaženemo isto poizvedbo kot v zadnji temi, v rezultatu ne bomo nikoli videli dokumenta z "GURU99". Da bi zagotovili, da je to v naboru rezultatov, moramo dodati parameter $ options "I".

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

Razlaga kode:

  1. Možnost $ s parametrom 'I' (kar pomeni neobčutljivost na velike in male črke) določa, da želimo izvesti iskanje, ne glede na to, ali najdemo črke 'Gu' z malimi ali velikimi črkami.

Če se ukaz uspešno izvede, se prikaže naslednji izhod:

Izhod:

  1. Izhod jasno kaže, da čeprav je en dokument z velikimi črkami 'Gu', se dokument še vedno prikaže v naboru rezultatov.

Ujemanje vzorcev brez operaterja regularnih izrazov

Ujemanje vzorcev je mogoče tudi brez operaterja regularnih izrazov. Naslednji primer prikazuje, kako je to mogoče storiti.

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

Razlaga kode:

  1. Možnosti "//" v bistvu pomenijo določitev iskalnih kriterijev znotraj teh ločil. Zato določimo / Gu /, da znova najdemo tiste dokumente, ki imajo v imenu EmployeeName "Gu".

Če se ukaz uspešno izvede, se prikaže naslednji izhod:

Izhod:

Rezultat jasno kaže, da se vrnejo tisti dokumenti, v katerih ime zaposlenega vsebuje znake 'Gu'.

Pridobivanje zadnjih 'n' dokumentov iz zbirke

Obstaja več načinov, kako dobiti zadnjih n dokumentov v zbirki.

Oglejmo si enega od načinov v naslednjih korakih

Naslednji primer prikazuje, kako je to mogoče storiti.

Predpostavimo, da imamo isto zbirko zaposlenih, ki ima imeni polji "Employeeid" in "EmployeeName".

Predpostavimo tudi, da imamo v svoji zbirki naslednje dokumente:

ID zaposlenega ime zaposlenega
22. NewMartin
2. Mohan
3. Joe
4. MohanR
100 Guru99
6. Gurang
7. GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Razlaga kode:

1) Pri poizvedovanju po dokumentih uporabite funkcijo razvrščanja, da razvrstite zapise v obratnem vrstnem redu glede na vrednost polja _id v zbirki. -1 v bistvu označuje razvrščanje dokumentov v obratnem ali padajočem vrstnem redu, tako da zadnji dokument postane prvi dokument, ki se prikaže.

2) Nato uporabite klavzulo limit, da samo prikažete želeno število zapisov. Tu smo nastavili klavzulo o omejitvi (2), zato bo prišla zadnja dva dokumenta.

Če se ukaz uspešno izvede, se prikaže naslednji izhod:

Izhod:

Rezultat jasno kaže, da sta prikazana zadnja dva dokumenta v zbirki. Zato smo jasno pokazali, da lahko za pridobitev zadnjih 'n' dokumentov v zbirki dokumente najprej razvrstimo po padajočem vrstnem redu in nato s klavzulo o omejitvi vrnemo 'n' število potrebnih dokumentov.

Opomba : Če iskanje poteka v nizu, ki je daljši od recimo 38.000 znakov, ne bo prikazal pravih rezultatov.

Povzetek:

  • Ujemanje vzorcev lahko doseže operater $ regex. S tem operatorjem lahko poiščemo določene nize v zbirki.
  • Simbol in $ lahko uporabite za natančna iskanja besedila, pri čemer se uporablja za zagotovitev, da se niz začne z določenim znakom, $ pa za zagotovitev, da se niz konča z določenim znakom.
  • Znak 'i' skupaj z operaterjem $ regex lahko uporabimo za določanje neobčutljivosti na velike in male črke, tako da je mogoče po nizih iskati, ali so v malih ali velikih črkah.
  • Ločila // se lahko uporabljajo tudi za ujemanje vzorcev.
  • Za vrnitev zadnjih n dokumentov v zbirki uporabite kombinacijo funkcije razvrščanja in omejitve. Funkcijo razvrščanja lahko uporabite za vrnitev dokumentov v padajočem vrstnem redu, po kateri lahko omejitveno klavzulo omejite število vrnjenih dokumentov.