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.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Koodin selitys:
- 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
- Printjsonia käytetään jokaisen kyselyn palauttaman asiakirjan tulostamiseen paremmalla tavalla.
Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:
lähtö:
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ä.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Koodin selitys:
- 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.
- Printjsonia käytetään jokaisen kyselyn palauttaman asiakirjan tulostamiseen paremmalla tavalla.
Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:
lähtö:
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”.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Koodin selitys:
- $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ö:
- 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ä.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Koodin selitys:
- "//"-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ö:
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 |
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ö:
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ää.