MongoDB Regular Expression (Regex) met voorbeelden

Inhoudsopgave:

Anonim

Reguliere expressies worden gebruikt voor het matchen van patronen, wat in feite is voor tekenreeksen voor bevindingen in documenten.

Soms weet u bij het ophalen van documenten in een verzameling niet precies naar de exacte veldwaarde waarnaar moet worden gezocht. Daarom kan men reguliere expressies gebruiken om te helpen bij het ophalen van gegevens op basis van zoekwaarden voor patroonovereenkomsten.

In deze tutorial leer je -

  • $ Regex-operator gebruiken voor patroonovereenkomst
  • Patroonaanpassing met $ opties
  • Patroonovereenkomst zonder de regex-operator
  • Laatste 'n' documenten ophalen uit een verzameling

$ Regex-operator gebruiken voor patroonovereenkomst

De regex-operator in MongoDB wordt gebruikt om naar specifieke tekenreeksen in de verzameling te zoeken. Het volgende voorbeeld laat zien hoe u dit kunt doen.

Laten we aannemen dat we dezelfde Employee-collectie hebben met de veldnamen "Employeeid" en "EmployeeName". Laten we er ook vanuit gaan dat we de volgende documenten in onze collectie hebben.

Werknemer-ID Naam werknemer
22 NieuwMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Hier in de onderstaande code hebben we de regex-operator gebruikt om de zoekcriteria op te geven.

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

Code Verklaring:

  1. Hier willen we alle werknemersnamen vinden met de letters 'Gu' erin. Daarom specificeren we de $ regex-operator om de zoekcriteria van 'Gu' te definiëren
  2. De printjson wordt gebruikt om elk document dat door de query wordt geretourneerd op een betere manier af te drukken.

Als de opdracht met succes is uitgevoerd, wordt de volgende uitvoer weergegeven:

Uitgang:

Uit de uitvoer blijkt duidelijk dat die documenten waarin de naam van de werknemer de 'Gu'-tekens bevat, worden geretourneerd.

Stel dat uw verzameling de volgende documenten heeft met een aanvullend document dat de naam van de werknemer bevatte als "Guru999". Als u de zoekcriteria als "Guru99" had ingevoerd, zou het ook het document met "Guru999" retourneren. Maar stel dat we dit niet willen en alleen het document willen retourneren met "Guru99". Dan kunnen we dit doen met exacte patroonafstemming. Om een ​​exacte patroonovereenkomst te maken, gebruiken we de tekens en $. We voegen het -teken toe aan het begin van de string en $ aan het einde van de string.

Werknemer-ID Naam werknemer
22 NieuwMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Het volgende voorbeeld laat zien hoe u dit kunt doen.

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

Code Verklaring:

  1. Hier in de zoekcriteria gebruiken we de tekens en $. De wordt gebruikt om ervoor te zorgen dat de tekenreeks begint met een bepaald teken, en $ wordt gebruikt om ervoor te zorgen dat de tekenreeks eindigt met een bepaald teken. Dus als de code wordt uitgevoerd, wordt alleen de string met de naam "Guru99" opgehaald.
  2. De printjson wordt gebruikt om elk document dat door de query wordt geretourneerd op een betere manier af te drukken.

Als de opdracht met succes is uitgevoerd, wordt de volgende uitvoer weergegeven:

Uitgang:

In de output is duidelijk te zien dat string "Guru99" wordt opgehaald.

Patroonaanpassing met $ opties

Bij gebruik van de regex-operator kan men ook extra opties bieden door het trefwoord $ options te gebruiken . Stel dat u alle documenten met 'Gu' in de naam van de werknemer wilt vinden, ongeacht of het hoofdlettergevoelig of ongevoelig is. Als een dergelijk resultaat gewenst is, moeten we de $ options with case insensitivity parameter gebruiken.

Het volgende voorbeeld laat zien hoe u dit kunt doen.

Laten we aannemen dat we dezelfde Employee-collectie hebben met de veldnamen "Employeeid" en "EmployeeName".

Laten we er ook vanuit gaan dat we de volgende documenten in onze collectie hebben.

Werknemer-ID Naam werknemer
22 NieuwMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Als we nu dezelfde query uitvoeren als in het vorige onderwerp, zouden we nooit het document met "GURU99" in het resultaat zien. Om ervoor te zorgen dat dit in de resultatenset komt, moeten we de $ options "I" -parameter toevoegen.

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

Code Verklaring:

  1. De $ opties met 'I'-parameter (wat hoofdletterongevoeligheid betekent) specificeert dat we de zoekopdracht willen uitvoeren, ongeacht of we de letters' Gu 'in kleine of hoofdletters vinden.

Als de opdracht met succes is uitgevoerd, wordt de volgende uitvoer weergegeven:

Uitgang:

  1. De uitvoer laat duidelijk zien dat, hoewel een document de hoofdletter 'Gu' heeft, het document toch wordt weergegeven in de resultatenset.

Patroonovereenkomst zonder de regex-operator

Men kan ook patroonafstemming doen zonder de regex-operator. Het volgende voorbeeld laat zien hoe u dit kunt doen.

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

Code Verklaring:

  1. De "//" -opties betekenen in feite dat u uw zoekcriteria binnen deze scheidingstekens specificeert. Daarom specificeren we / Gu / om opnieuw die documenten te vinden die 'Gu' in hun EmployeeName hebben.

Als de opdracht met succes is uitgevoerd, wordt de volgende uitvoer weergegeven:

Uitgang:

Uit de uitvoer blijkt duidelijk dat die documenten waarin de naam van de werknemer de 'Gu'-tekens bevat, worden geretourneerd.

Laatste 'n' documenten ophalen uit een verzameling

Er zijn verschillende manieren om de laatste n documenten in een verzameling te krijgen.

Laten we een van de manieren bekijken via de volgende stappen

Het volgende voorbeeld laat zien hoe u dit kunt doen.

Laten we aannemen dat we dezelfde Employee-collectie hebben met de veldnamen "Employeeid" en "EmployeeName".

Laten we er ook vanuit gaan dat we de volgende documenten in onze collectie hebben:

Werknemer-ID Naam werknemer
22 NieuwMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Code Verklaring:

1) Gebruik bij het zoeken naar de documenten de sorteerfunctie om de records in omgekeerde volgorde te sorteren op basis van de veldwaarde _id in de verzameling. De -1 geeft in feite aan dat de documenten in omgekeerde volgorde of aflopende volgorde moeten worden gesorteerd, zodat het laatste document het eerste document wordt dat wordt weergegeven.

2) Gebruik vervolgens de limietclausule om alleen het aantal records weer te geven dat u wilt. Hier hebben we de limietclausule (2) ingesteld, dus het haalt de laatste twee documenten op.

Als de opdracht met succes is uitgevoerd, wordt de volgende uitvoer weergegeven:

Uitgang:

Uit de output blijkt duidelijk dat de laatste twee documenten in de collectie worden getoond. Daarom hebben we duidelijk aangetoond dat om de laatste 'n' documenten in de collectie op te halen, we de documenten eerst in aflopende volgorde kunnen sorteren en vervolgens de limietclausule gebruiken om het 'n' aantal documenten dat nodig is terug te geven.

Opmerking : als de zoekopdracht wordt uitgevoerd op een tekenreeks die groter is dan bijvoorbeeld 38.000 tekens, worden niet de juiste resultaten weergegeven.

Overzicht:

  • Patroonovereenkomst kan worden bereikt door de $ regex-operator. Deze operator kan worden gebruikt om naar bepaalde strings in de verzameling te zoeken.
  • Het en $ -symbool kunnen worden gebruikt voor exacte tekstzoekopdrachten waarbij wordt gebruikt om ervoor te zorgen dat de tekenreeks begint met een bepaald teken en $ wordt gebruikt om ervoor te zorgen dat de tekenreeks eindigt met een bepaald teken.
  • De 'i' samen met de $ regex-operator kan worden gebruikt om hoofdletterongevoeligheid te specificeren, zodat strings kunnen worden doorzocht, of ze nu in kleine letters of in hoofdletters zijn.
  • De scheidingstekens // kunnen ook worden gebruikt voor het matchen van patronen.
  • Gebruik een combinatie van sorteren en de limietfunctie om de laatste n documenten in de verzameling te retourneren. De sorteerfunctie kan worden gebruikt om de documenten in aflopende volgorde te retourneren, waarna de limietclausule kan worden gebruikt om het aantal documenten dat wordt geretourneerd te beperken.