MongoDB Säännöllinen lauseke ($regex) esimerkkeineen
⚡ Älykäs yhteenveto
MongoDB Säännölliset lausekkeet suorittavat kuvioiden yhteensovitusta löytääkseen merkkijonoja dokumenteista käyttämällä $regex-operaattoria, $options-lippua kirjainkoon epäherkkyyden havaitsemiseksi, ankkureita tarkkojen osumien havaitsemiseksi ja kauttaviivaerottimia, kun tarkka kentän arvo on tuntematon.

Säännöllisiä lausekkeita käytetään kuvioiden yhteensovittamiseen, eli merkkijonojen löytämiseen dokumenteista.
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 kohdassa MongoDB käytetään tiettyjen merkkijonojen etsimiseen kokoelmasta. Seuraava esimerkki osoittaa, kuinka tämä voidaan tehdä.
Oletetaan, että meillä on sama työntekijäkokoelma, jonka kenttänimet ovat ”Työntekijätunnus” ja ”TyöntekijänNimi”. 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)
Code Selitys:
- Tässä osiossa haluamme löytää kaikki työntekijöiden nimet, joissa on merkkejä 'Gu'. Siksi määritämme $regex-operaattorin hakuehdoksi 'Gu'.
- 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, jossa työntekijän nimi on "Guru999”. Jos syötit hakukriteerit muodossa ”Guru99”, se palauttaisi myös dokumentin, jossa oli ”Guru999”. Mutta entä jos emme haluaisi tätä ja haluaisimme vain palauttaa asiakirjan, jossa on ”Guru99”. Sitten voimme tehdä tämän tarkalla kuvion täsmäyksellä. Tarkan kuvion täsmäyksen suorittamiseksi käytämme ^- ja $-merkkejä. Lisäämme ^-merkin merkkijonon alkuun ja $-merkin 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)
Code Selitys:
- Tässä hakuehdoissa käytämme ^- ja $-merkkejä. ^-merkkiä käytetään varmistamaan, että merkkijono alkaa tietyllä merkillä, ja $-merkkiä käytetään varmistamaan, että merkkijono päättyy tiettyyn merkkiin. Joten suoritettaessa koodi noutaa vain merkkijonon nimeltä "Guru99. "
- 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” noudetaan.
Mallin yhteensopivuus $optioilla
$regex-operaattoria käytettäessä voidaan antaa myös lisäasetuksia 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 kirjainkokoa ei erotella -parametrilla.
Seuraava esimerkki osoittaa, kuinka tämä voidaan tehdä.
Oletetaan, että meillä on sama työntekijäkokoelma, jonka kenttänimet ovat ”Työntekijätunnus” ja ”TyöntekijänNimi”.
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 tuloksessa dokumenttia, jonka teksti on ”GURU99”. Jotta tämä varmasti näkyisi tulosjoukossa, meidän on lisättävä $options ”i” -parametri.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Code Selitys:
- $options-muuttuja ja 'i'-parametri (eli kirjainkokoa ei erotella) määrittävät, että haku suoritetaan riippumatta siitä, löydämmekö 'Gu' kirjaimet pieninä vai isoina kirjaimina.
Jos komento suoritetaan onnistuneesti, seuraava tulos näytetään:
lähtö:
- Tuloste osoittaa selvästi, että vaikka yhdessä dokumentissa on isolla kirjaimella 'Gu', dokumentti näkyy silti tulosjoukossa.
Kuvion täsmäytys ilman regex-operaattoria
Hahmontunnistusta voidaan tehdä myös ilman $regex-operaattoria. Seuraava esimerkki näyttää, miten tämä voidaan tehdä.
db.Employee.find({EmployeeName: /Gu/}).forEach(printjson)
Code Selitys:
- ”//”-erottimet tarkoittavat pohjimmiltaan hakuehtojen määrittämistä näiden erottimien sisällä. Siksi määritämme /Gu/ löytääksemme jälleen ne asiakirjat, joiden EmployeeName-kentässä 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ä tapaa seuraavien vaiheiden avulla.
Seuraava esimerkki osoittaa, kuinka tämä voidaan tehdä.
Oletetaan, että meillä on sama työntekijäkokoelma, jonka kenttänimet ovat ”Työntekijätunnus” ja ”TyöntekijänNimi”.
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)
Code Selitys:
- Kun haet asiakirjoja, käytä lajittelufunktiota lajitellaksesi tietueet käänteiseen järjestykseen kokoelman _id-kentän arvon perusteella. -1 tarkoittaa pohjimmiltaan asiakirjojen lajittelua käänteiseen eli laskevaan järjestykseen siten, että viimeisestä asiakirjasta tulee ensimmäinen näytettävä asiakirja.
- Käytä sitten limit-lauseketta näyttääksesi vain haluamasi määrän tietueita. Tässä olemme asettaneet limit-lausekkeen (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.










