Vanliga uttryck används för mönstermatchning, vilket i grunden är för upptäcktssträngar i dokument.
Ibland när du hämtar dokument i en samling kanske du inte vet exakt vad det exakta fältvärdet 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.
I den här handledningen lär du dig -
- Använder $ regex-operatören för mönstermatchning
- Mönstermatchning med $ -alternativ
- Mönstermatchning utan regex-operator
- Hämtar sista 'n' dokument från en samling
Använder $ regex-operatören för mönstermatchning
Regex-operatören 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 anställdssamling 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 regex-operatören för att ange sökkriterierna.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kodförklaring:
- Här vill vi hitta alla anställdas namn som har tecknen 'Gu'. Därför anger vi $ regex-operatören för att definiera sökkriterierna för '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 visas följande utdata:
Produktion:
Utdata visar tydligt att de dokument där anställdas namn innehåller 'Gu' -tecknen returneras.
Om antar att din samling har följande dokument med ett ytterligare dokument som innehöll anställdas namn som "Guru999". Om du angav sökkriterierna som "Guru99" skulle det också returnera dokumentet som hade "Guru999". Men antag att om vi inte ville ha detta och bara ville returnera dokumentet med "Guru99". Sedan 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)
Kodförklaring:
- Här i sökkriterierna använder vi tecknen och $. Används för att se till 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 visas följande utdata:
Produktion:
I utgången är det tydligt att strängen "Guru99" hämtas.
Mönstermatchning med $ -alternativ
När du använder regex-operatören kan man också tillhandahålla ytterligare alternativ genom att använda nyckelordet $ options. Antag till exempel att du ville hitta alla dokument som hade 'Gu' i deras anställds namn, oavsett om det var skiftlägeskänsligt eller okänsligt. Om ett sådant resultat är önskvärt måste vi använda $ -alternativen med skiftlägeskänslighet.
Följande exempel visar hur detta kan göras.
Låt oss anta att vi har samma anställdssamling 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 |
Nu om vi kör samma fråga som i det senaste ämnet, skulle vi aldrig se dokumentet med "GURU99" i resultatet. För att säkerställa att detta kommer i resultatuppsättningen måste vi lägga till parametern $ options "I".
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Kodförklaring:
- $ -Alternativen med "I" -parametern (vilket betyder skiftlägeskänslighet) anger att vi vill utföra sökningen oavsett om vi hittar bokstäverna "Gu" i gemener eller versaler.
Om kommandot utförs framgångsrikt visas följande utdata:
Produktion:
- Utgången visar tydligt att även om ett dokument har gemener 'Gu' visas dokumentet fortfarande i resultatuppsättningen.
Mönstermatchning utan regex-operator
Man kan också göra mönstermatchning utan regex-operatören. Följande exempel visar hur detta kan göras.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kodförklaring:
- Alternativet "//" betyder i princip att du anger dina sökkriterier inom dessa avgränsare. Därför specificerar vi / Gu / för att åter hitta de dokument som har "Gu" i deras anställd.
Om kommandot utförs framgångsrikt visas följande utdata:
Produktion:
Utdata visar tydligt att de dokument där anställdas 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 genom följande steg
Följande exempel visar hur detta kan göras.
Låt oss anta att vi har samma anställdssamling 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)
Kodförklaring:
1) När du frågar efter dokument använder du sorteringsfunktionen för att sortera posterna i omvänd ordning baserat på fältet _id i samlingen. -1 anger i princip att sortera dokumenten i omvänd ordning eller fallande ordning så att det sista dokumentet blir det första dokumentet som ska visas.
2) Använd sedan gränssatsen för att bara visa antalet poster du vill ha. Här har vi ställt in gränsparagrafen (2) så att de två sista dokumenten hämtas.
Om kommandot utförs framgångsrikt visas följande utdata:
Produktion:
Utdata 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 'n' antal dokument som krävs.
Obs : Om sökningen utförs på en sträng som är större än säg 38 000 tecken, kommer den inte att visa rätt resultat.
Sammanfattning:
- Mönstermatchning kan uppnås av $ regex-operatören. Denna operatör kan användas för att hitta för vissa strängar i samlingen.
- Symbolen och $ kan användas för exakta textsökningar där används för att se till 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.
- 'Jag' tillsammans med $ regex-operatören kan användas för att specificera skiftlägeskänslighet så att strängar kan sökas oavsett om de är med gemener eller versaler.
- Avgränsarna // kan också användas för mönstermatchning.
- Använd en kombination av sortering och gränsfunktionen för att returnera de sista n-dokumenten i samlingen. Sorteringsfunktionen kan användas för att returnera dokumenten i fallande ordning varefter gränssatsen kan användas för att begränsa antalet dokument som returneras.