MongoDB Säännöllinen lauseke (Regex) esimerkein

Säännöllisiä lausekkeita käytetään kuvioiden sovittamiseen, joka on pohjimmiltaan asiakirjamerkkijonojen etsimiseen.

Joskus kun haet asiakirjoja kokoelmasta, et ehkä tiedä tarkalleen mitä kenttää etsit. Näin ollen voidaan käyttää säännöllisiä lausekkeita auttamaan tietojen hakemisessa mallia vastaavien hakuarvojen perusteella.

$regex-operaattorin käyttäminen kuvioiden sovittamiseen

- regex-operaattori sisään MongoDB käytetään tiettyjen merkkijonojen etsimiseen kokoelmasta. Seuraava esimerkki osoittaa, kuinka tämä voidaan tehdä.

Oletetaan, että meillä on sama Työntekijäkokoelmamme, jonka kenttien nimet ovat “Employee” ja “EmployeeName”. Oletetaan myös, että kokoelmassamme on seuraavat asiakirjat.

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

Tässä alla olevassa koodissa olemme käyttäneet regex-operaattoria hakuehtojen määrittämiseen.

$regexin käyttö Operator kuvioiden yhdistämiseen

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". Tästä syystä määritämme $regex-operaattorin määrittämään "Gu"-hakuehdot
  2. Printjsonia käytetään jokaisen kyselyn palauttaman asiakirjan tulostamiseen paremmalla tavalla.

Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:

lähtö:

$regexin käyttö Operator kuvioiden yhdistämiseen

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

Jos oletetaan, että kokoelmassasi on seuraavat asiakirjat ja lisäasiakirja, joka sisälsi työntekijän nimen "Guru999". Jos syötät hakuehtoihin "Guru99", se palauttaa myös asiakirjan, jossa oli "Guru999". Mutta oletetaan, jos emme halunneet tätä ja halusimme vain palauttaa asiakirjan "Guru99". Sitten voimme tehdä tämän tarkalla kuviosovituksella. Käytämme ^- ja $-merkkejä tarkan kuviosovituksen tekemiseksi. Lisäämme merkin ^ merkkijonon alkuun ja $ merkkijonon loppuun.

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

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

$regexin käyttö Operator kuvioiden yhdistämiseen

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

Koodin selitys:

  1. Tässä hakuehdoissa käytämme ^- ja $-merkkiä. ^-merkkiä käytetään varmistamaan, että merkkijono alkaa tietyllä merkillä, ja $:aa käytetään varmistamaan, että merkkijono päättyy tiettyyn merkkiin. Joten kun koodi suoritetaan, se hakee vain "Guru99"-nimisen merkkijonon.
  2. Printjsonia käytetään jokaisen kyselyn palauttaman asiakirjan tulostamiseen paremmalla tavalla.

Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:

lähtö:

$regexin käyttö Operator kuvioiden yhdistämiseen

Tulosteessa näkyy selvästi, että merkkijono "Guru99" haetaan.

Mallin yhteensopivuus $optioilla

Käytettäessä regex-operaattoria voidaan myös tarjota lisävaihtoehtoja käyttämällä $optiot avainsana. Oletetaan esimerkiksi, että haluat löytää kaikki asiakirjat, joiden työntekijän nimessä oli "Gu", riippumatta siitä, onko kirjainkoolla merkitystä vai ei. Jos tällaista tulosta halutaan, meidän on käytettävä $optiot kirjainkoko- ja kirjainherkkyysparametrilla.

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

Oletetaan, että meillä on sama Työntekijäkokoelmamme, jonka kenttien nimet ovat “Employee” ja “EmployeeName”.

Oletetaan myös, että kokoelmassamme on seuraavat asiakirjat.

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

Jos nyt suoritamme saman kyselyn kuin edellisessä aiheessa, emme koskaan näe asiakirjaa, jossa on "GURU99" tuloksessa. Varmistaaksemme, että tämä tulee tulosjoukkoon, meidän on lisättävä parametri $options “I”.

Mallin yhteensopivuus $optioilla

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

Koodin selitys:

  1. $optiot 'I'-parametrilla (joka tarkoittaa kirjainkoosta välinpitämättömyyttä) määrittää, että haluamme suorittaa haun riippumatta siitä, löydämmekö kirjaimet 'Gu' pienillä vai isoilla kirjaimilla.

Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:

lähtö:

Mallin yhteensopivuus $optioilla

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

Kuvion täsmäytys ilman regex-operaattoria

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

Kuvioiden sovitus ilman säännöllistä lauseketta OperaTor

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

Koodin selitys:

  1. "//"-vaihtoehdot tarkoittavat periaatteessa hakuehtojen määrittämistä näiden erottimien sisällä. Tästä syystä määritämme /Gu/ löytääksemme uudelleen ne asiakirjat, joiden Työntekijänimessä on "Gu".

Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:

lähtö:

Kuvioiden sovitus ilman säännöllistä lauseketta OperaTor

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

Haetaan viimeisiä 'n' asiakirjoja kokoelmasta

On olemassa useita tapoja saada kokoelman viimeiset n asiakirjaa.

Tarkastellaan yhtä tavoista seuraavien vaiheiden kautta

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

Oletetaan, että meillä on sama Työntekijäkokoelmamme, jonka kenttien nimet ovat “Employee” ja “EmployeeName”.

Oletetaan myös, että kokoelmassamme on seuraavat asiakirjat:

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

Viimeisten 'n' asiakirjojen hakeminen kokoelmasta

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Koodin selitys:

1) Kun haet asiakirjoja, käytä lajittelutoimintoa lajitellaksesi tietueet käänteiseen järjestykseen kokoelman _id-kentän arvon perusteella. -1 tarkoittaa periaatteessa asiakirjojen lajittelua käänteiseen tai laskevaan järjestykseen niin, että viimeisestä asiakirjasta tulee ensimmäinen näytettävä asiakirja.

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

Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:

lähtö:

Viimeisten 'n' asiakirjojen hakeminen kokoelmasta

Tulos osoittaa selvästi, että kokoelman kaksi viimeistä dokumenttia näkyvät. Tästä syystä olemme selvästi osoittaneet, että noutaaksemme kokoelman viimeisen n-asiakirjan voimme ensin lajitella asiakirjat laskevaan järjestykseen ja sitten käyttää rajalauseketta palauttaaksemme vaaditun n-määrän asiakirjoja.

Huomautuksia: Jos haku suoritetaan merkkijonolle, joka on pitempi kuin esimerkiksi 38,000 XNUMX merkkiä, se ei näytä oikeita tuloksia.

Yhteenveto

  • Kuvion sovitus voidaan saavuttaa $regex-operaattorilla. Tätä operaattoria voidaan käyttää tiettyjen kokoelman merkkijonojen etsimiseen.
  • ^- ja $-symbolia voidaan käyttää tarkkoihin tekstihakuihin, kun merkkiä ^ käytetään varmistamaan, että merkkijono alkaa tietyllä merkillä, ja $-symbolia käytetään varmistamaan, että merkkijono päättyy tiettyyn merkkiin.
  • i-kirjainta ja $regex-operaattoria voidaan käyttää määrittämään kirjainkoolla välinpitämättömyyttä, jotta merkkijonoja voidaan etsiä riippumatta siitä, ovatko ne pienillä tai isoilla kirjaimilla.
  • Erottimia // voidaan käyttää myös kuvioiden sovittamiseen.
  • Käytä lajittelu- ja rajafunktion yhdistelmää palauttaaksesi kokoelman viimeiset n asiakirjaa. Lajittelutoiminnolla voidaan palauttaa asiakirjat laskevassa järjestyksessä, minkä jälkeen rajalausekkeella voidaan rajoittaa palautettavien asiakirjojen määrää.