MongoDB Reguljärt uttryck ($regex) med exempel
⚡ Smart sammanfattning
MongoDB reguljära uttryck utför mönstermatchning för att hitta strängar inuti dokument, med hjälp av operatorn $regex, flaggan $options för skiftlägesokänslighet, ankare för exakta matchningar och snedstreckavgränsare när det exakta fältvärdet är okänt.
Reguljära uttryck används för mönstermatchning, vilket i grunden är för att hitta strängar i dokument.
Ibland när du hämtar dokument i en samling vet du kanske inte exakt vilket fältvärde du ska söka efter. Därför kan man använda reguljära uttryck för att hjälpa till att hämta data baserat på mönstermatchande sökvärden.
Använder operatorn $regex för mönstermatchning
Operatorn $regex i MongoDB används för att söka efter specifika strängar i samlingen. Följande exempel visar hur detta kan göras.
Låt oss anta att vi har samma Employee-samling som har fältnamnen "Employeeid" och "EmployeeName". Låt oss också anta att vi har följande dokument i vår samling.
| Anställnings-ID | Anställd Namn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
Här i koden nedan har vi använt operatorn $regex för att ange sökkriterierna.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Code Förklaring:
- Här vill vi hitta alla anställningsnamn som innehåller tecknen 'Gu'. Därför anger vi operatorn $regex för att definiera sökkriterierna 'Gu'.
- Printjson används för att skriva ut varje dokument som returneras av frågan på ett bättre sätt.
Om kommandot utförs framgångsrikt kommer följande utdata att visas:
Produktion:
Utdata visar tydligt att de dokument där anställds namn innehåller "Gu"-tecknen returneras.
Om du antar att din samling har följande dokument med ett ytterligare dokument som innehåller medarbetarens namn som "Guru999”. Om du angav sökkriterierna som “Guru99”, skulle det också returnera dokumentet som hade “Guru999”. Men anta att vi inte ville ha detta och bara ville returnera dokumentet med “Guru99”. Då kan vi göra detta med exakt mönstermatchning. För att göra en exakt mönstermatchning använder vi tecknen ^ och $. Vi lägger till tecknet ^ i början av strängen och $ i slutet av strängen.
| Anställnings-ID | Anställd Namn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 8 | Guru999 |
Följande exempel visar hur detta kan göras.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Code Förklaring:
- Här i sökkriterierna använder vi tecknen ^ och $. ^ används för att säkerställa att strängen börjar med ett visst tecken, och $ används för att säkerställa att strängen slutar med ett visst tecken. Så när koden körs kommer den bara att hämta strängen med namnet “Guru99. "
- Printjson används för att skriva ut varje dokument som returneras av frågan på ett bättre sätt.
Om kommandot utförs framgångsrikt kommer följande utdata att visas:
Produktion:
I utdata syns det tydligt att strängen "Guru99” är hämtad.
Mönstermatchning med $options
När man använder operatorn $regex kan man också ge ytterligare alternativ genom att använda $alternativ nyckelord. Anta till exempel att du ville hitta alla dokument som hade "Gu" i deras anställdas namn, oavsett om det var skiftlägeskänsligt eller okänsligt. Om ett sådant resultat önskas måste vi använda $alternativ med parametern för skiftlägesokänslighet.
Följande exempel visar hur detta kan göras.
Låt oss anta att vi har samma Employee-samling som har fältnamnen "Employeeid" och "EmployeeName".
Låt oss också anta att vi har följande dokument i vår samling.
| Anställnings-ID | Anställd Namn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 7 | GURU99 |
Om vi kör samma fråga som i det förra ämnet skulle vi aldrig se dokumentet med "GURU99" i resultatet. För att säkerställa att detta kommer med i resultatmängden måste vi lägga till parametern "i" för $options.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Code Förklaring:
- $options med parametern 'i' (vilket betyder skiftlägesokänslighet) anger att vi vill utföra sökningen oavsett om vi hittar bokstäverna 'Gu' med gemener eller versaler.
Om kommandot utförs framgångsrikt kommer följande utdata att visas:
Produktion:
- Utdata visar tydligt att även om ett dokument har versalerna 'Gu', visas dokumentet fortfarande i resultatmängden.
Mönstermatchning utan regexoperatorn
Man kan också göra mönstermatchning utan operatorn $regex. Följande exempel visar hur detta kan göras.
db.Employee.find({EmployeeName: /Gu/}).forEach(printjson)
Code Förklaring:
- Avgränsarna "//" syftar i princip till att ange dina sökkriterier inom dessa avgränsare. Därför anger vi /Gu/ för att återigen hitta de dokument som har 'Gu' i sitt anställdsnamn.
Om kommandot utförs framgångsrikt kommer följande utdata att visas:
Produktion:
Utdata visar tydligt att de dokument där anställds namn innehåller "Gu"-tecknen returneras.
Hämtar sista 'n' dokument från en samling
Det finns olika sätt att få de sista n dokumenten i en samling.
Låt oss titta på ett av sätten via följande steg.
Följande exempel visar hur detta kan göras.
Låt oss anta att vi har samma Employee-samling som har fältnamnen "Employeeid" och "EmployeeName".
Låt oss också anta att vi har följande dokument i vår samling:
| Anställnings-ID | Anställd Namn |
|---|---|
| 22 | NewMartin |
| 2 | Mohan |
| 3 | joe |
| 4 | MohanR |
| 100 | Guru99 |
| 6 | Gurang |
| 7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Code Förklaring:
- När du frågar efter dokument, använd sorteringsfunktionen för att sortera posterna i omvänd ordning baserat på _id-fältets värde i samlingen. -1 indikerar i princip att dokumenten ska sorteras i omvänd ordning eller fallande ordning så att det sista dokumentet blir det första dokumentet som visas.
- Använd sedan limit-klausulen för att bara visa antalet poster du vill ha. Här har vi satt limit-klausulen (2), så att den hämtar de två sista dokumenten.
Om kommandot utförs framgångsrikt kommer följande utdata att visas:
Produktion:
Utgången visar tydligt att de två sista dokumenten i samlingen visas. Därför har vi tydligt visat att för att hämta de sista 'n' dokumenten i samlingen kan vi först sortera dokumenten i fallande ordning och sedan använda gränssatsen för att returnera det 'n' antal dokument som krävs.
Anmärkningar: Om sökningen utförs på en sträng som är större än säg 38,000 XNUMX tecken, kommer den inte att visa rätt resultat.











