MongoDB: n säännöllinen lauseke (Regex) ja esimerkkejä

Sisällysluettelo:

Anonim

Säännöllisiä lausekkeita käytetään kuvion sovittamiseen, mikä on pohjimmiltaan asiakirjojen havaintojonoja varten.

Joskus noudettaessa kokoelman asiakirjoja et välttämättä tiedä tarkalleen mitä tarkkaa Field-arvoa etsitään. Siksi voidaan käyttää säännöllisiä lausekkeita avustamaan tietoja mallin mukaisten hakuarvojen perusteella.

Tässä opetusohjelmassa opit -

  • Käyttämällä $ regex -operaattoria kuvion sovittamiseen
  • Kuvio vastaa $ -vaihtoehtoja
  • Kuvion sovitus ilman regex-operaattoria
  • Haetaan viimeisiä n-asiakirjoja kokoelmasta

Käyttämällä $ regex -operaattoria kuvion sovittamiseen

MongoDB: n regex-operaattoria käytetään etsimään tiettyjä merkkijonoja kokoelmasta. Seuraava esimerkki osoittaa, miten tämä voidaan tehdä.

Oletetaan, että meillä on sama Employee-kokoelmamme, jolla on kenttien nimet "Employeeid" ja "EmployeeName". Oletetaan myös, että kokoelmassamme on seuraavia asiakirjoja.

Henkilöstökortti työntekijän nimi
22 UusiMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Tässä alla olevassa koodissa olemme käyttäneet regex-operaattoria määrittelemään hakukriteerit.

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

Koodin selitys:

  1. Täältä haluamme löytää kaikki työntekijöiden nimet, joissa on merkit 'Gu'. Siksi määritämme $ regex -operaattorin määrittelemään hakusanan 'Gu'
  2. Printjsonilla tulostetaan jokainen asiakirja, jonka kysely palauttaa paremmin.

Jos komento suoritetaan onnistuneesti, seuraava lähtö näytetään:

Tuotos:

Tulos osoittaa selvästi, että palautetaan ne asiakirjat, joissa työntekijän nimi sisältää Gu-merkit.

Jos oletetaan, että kokoelmassasi on seuraavat asiakirjat ja lisäasiakirja, joka sisälsi työntekijän nimen nimellä "Guru999". Jos kirjoitit hakukriteeriksi "Guru99", se palauttaisi myös asiakirjan, jossa oli "Guru999". Mutta oletetaan, että jos emme halunneet tätä ja haluaisimme palauttaa asiakirjan vain "Guru99": llä. Sitten voimme tehdä tämän tarkalla kuvion sovituksella. Tarkan mallin mukauttamiseksi käytämme merkkejä ja $. Lisäämme merkin merkkijonon alkuun ja $ merkkijonon loppuun.

Henkilöstökortti työntekijän nimi
22 UusiMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Seuraava esimerkki osoittaa, miten tämä voidaan tehdä.

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

Koodin selitys:

  1. Tässä hakuehdoissa käytämme merkkejä ja $. ^: Llä varmistetaan, että merkkijono alkaa tietyllä merkillä, ja $: lla varmistetaan, että merkkijono päättyy tiettyyn merkkiin. Joten kun koodi suoritetaan, se hakee vain merkkijonon nimeltä "Guru99".
  2. Printjsonilla tulostetaan jokainen asiakirja, jonka kysely palauttaa paremmin.

Jos komento suoritetaan onnistuneesti, seuraava lähtö näytetään:

Tuotos:

Lähdössä on selvästi nähtävissä, että merkkijono "Guru99" haetaan.

Kuvio vastaa $ -vaihtoehtoja

Regex-operaattoria käytettäessä voidaan tarjota myös lisäasetuksia käyttämällä $ options- avainsanaa. Oletetaan esimerkiksi, että halusit löytää kaikki asiakirjat, joissa työntekijän nimessä oli kirjain "Gu", riippumatta siitä, olivatko ne kirjainkoolla vai merkityksettömiä. Jos tällaista tulosta halutaan, meidän on käytettävä $ -vaihtoehtoja ja kirjainkoon puuttumisen parametria.

Seuraava esimerkki osoittaa, miten tämä voidaan tehdä.

Oletetaan, että meillä on sama Employee-kokoelmamme, jolla on kenttien nimet "Employeeid" ja "EmployeeName".

Oletetaan myös, että kokoelmassamme on seuraavia asiakirjoja.

Henkilöstökortti työntekijän nimi
22 UusiMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Jos suoritamme saman kyselyn kuin edellisessä aiheessa, emme koskaan näe tuloksessa asiakirjaa, jossa on "GURU99". Tämän varmistamiseksi tulosjoukossa on lisättävä $ options "I" -parametri.

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

Koodin selitys:

  1. $ -Vaihtoehto parametrilla 'I' (mikä tarkoittaa kirjainkoon puuttumista) määrittää, että haluamme suorittaa haun riippumatta siitä, löydämmekö kirjaimet 'Gu' isoilla tai isoilla kirjaimilla.

Jos komento suoritetaan onnistuneesti, seuraava lähtö näytetään:

Tuotos:

  1. Tulos osoittaa selvästi, että vaikka yhdessä asiakirjassa on isot kirjaimet 'Gu', asiakirja näkyy silti tulosjoukossa.

Kuvion sovitus ilman regex-operaattoria

Kuvion sovittaminen voidaan tehdä myös ilman regex-operaattoria. Seuraava esimerkki osoittaa, miten tämä voidaan tehdä.

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

Koodin selitys:

  1. "//" -vaihtoehdot tarkoittavat periaatteessa hakukriteerien määrittämistä näissä erottimissa. Siksi määrittelemme / Gu / etsimään uudelleen ne asiakirjat, joiden EmployeeName-tiedostossa on 'Gu'.

Jos komento suoritetaan onnistuneesti, seuraava lähtö näytetään:

Tuotos:

Tulos osoittaa selvästi, että palautetaan ne asiakirjat, joissa työntekijän nimi sisältää Gu-merkit.

Haetaan viimeisiä n-asiakirjoja kokoelmasta

On useita tapoja saada viimeiset n asiakirjaa kokoelmasta.

Katsotaanpa yhtä tapaa seuraavien vaiheiden kautta

Seuraava esimerkki osoittaa, miten tämä voidaan tehdä.

Oletetaan, että meillä on sama Employee-kokoelmamme, jolla on kenttien nimet "Employeeid" ja "EmployeeName".

Oletetaan myös, että kokoelmassamme on seuraavia asiakirjoja:

Henkilöstökortti työntekijän nimi
22 UusiMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Koodin selitys:

1) Kun haet asiakirjoja, käytä lajittelutoimintoa lajitellaksesi tietueet käänteisessä järjestyksessä kokoelman kentän _id perusteella. -1 tarkoittaa periaatteessa asiakirjojen lajittelua käänteisessä tai laskevassa järjestyksessä siten, että viimeisestä asiakirjasta tulee ensimmäinen näytettävä asiakirja.

2) Käytä sitten rajalauseketta näyttääksesi vain haluamasi tietueiden määrän. Tässä olemme asettaneet rajalausekkeen (2), joten se noutaa kaksi viimeistä asiakirjaa.

Jos komento suoritetaan onnistuneesti, seuraava lähtö näytetään:

Tuotos:

Tulos osoittaa selvästi, että kokoelman kaksi viimeistä asiakirjaa näytetään. Siksi olemme osoittaneet selvästi, että viimeisten n-kokoisten asiakirjojen noutamiseksi voimme ensin lajitella asiakirjat laskevassa järjestyksessä ja käyttää sitten rajalauseketta palauttamaan vaaditun määrän n-asiakirjoja.

Huomaa : Jos haku suoritetaan merkkijonossa, joka on suurempi kuin 38 000 merkkiä, se ei näytä oikeita tuloksia.

Yhteenveto:

  • Kuvion sovittaminen voidaan saavuttaa $ regex -operaattorilla. Tätä operaattoria voidaan käyttää tiettyjen merkkijonojen löytämiseen kokoelmasta.
  • Symboleja ja $ voidaan käyttää tarkkaan tekstihakuun, kun -merkillä varmistetaan, että merkkijono alkaa tietyllä merkillä ja $: lla varmistetaan, että merkkijono päättyy tietyllä merkillä.
  • 'I': tä yhdessä $ regex -operaattorin kanssa voidaan määrittää isojen ja pienten kirjainten välillä, jotta merkkijonoja voidaan hakea pienillä tai isoilla kirjaimilla.
  • Erottimia // voidaan käyttää myös kuvien sovittamiseen.
  • Palauta viimeiset n dokumenttia kokoelmasta lajittelun ja rajatoiminnon yhdistelmällä. Lajittelutoimintoa voidaan käyttää asiakirjojen palauttamiseen laskevassa järjestyksessä, jonka jälkeen rajalauseketta voidaan käyttää palautettavien asiakirjojen määrän rajoittamiseen.