Редовен израз на MongoDB (Regex) с примери

Съдържание:

Anonim

Регулярните изрази се използват за съвпадение на образци, което е основно за низовете на констатации в документите.

Понякога, когато извличате документи в колекция, може да не знаете точно каква е точната стойност на полето за търсене. Следователно, може да се използват регулярни изрази, за да се подпомогне извличането на данни въз основа на стойности за търсене, съвпадащи с образец.

В този урок ще научите -

  • Използване на $ regex оператор за съвпадение на шаблони
  • Образец, съвпадащ с $ опции
  • Съвпадение на шаблон без оператора на регулярни изрази
  • Извличане на последните 'n' документи от колекция

Използване на $ regex оператор за съвпадение на шаблони

Операторът на регулярни изрази в MongoDB се използва за търсене на конкретни низове в колекцията. Следващият пример показва как това може да се направи.

Да приемем, че имаме същата колекция от служители, която има имената на полетата „Employeeid“ и „EmployeeName“. Нека приемем също, че имаме следните документи в нашата колекция.

Идент. № на служителя Име на служителя
22. NewMartin
2 Мохан
3 Джо
4 MohanR
100 Гуру99
6 Гуранг

Тук в кода по-долу използвахме оператора на регулярни изрази, за да зададем критериите за търсене.

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

Обяснение на кода:

  1. Тук искаме да намерим всички имена на служители, в които има символите „Gu“. Следователно, ние определяме оператора $ regex, за да дефинираме критериите за търсене на 'Gu'
  2. Printjson се използва за отпечатване на всеки документ, който се връща от заявката по-добре.

Ако командата се изпълни успешно, ще се покаже следният изход:

Изход:

Резултатът ясно показва, че тези документи, в които името на служителя съдържа символите „Gu“, се връщат.

Ако предположим, че вашата колекция има следните документи с допълнителен документ, който съдържа името на служителя като "Guru999". Ако сте въвели критериите за търсене като "Guru99", той също ще върне документа, който е имал "Guru999". Но предположим, че ако не сме искали това и сме искали само да върнем документа с „Guru99“. Тогава можем да направим това с точно съвпадение на шаблона. За да направим точно съвпадение на шаблона, ще използваме символа и $. Ще добавим символа в началото на низа и $ в края на низа.

Идент. № на служителя Име на служителя
22. NewMartin
2 Мохан
3 Джо
4 MohanR
100 Гуру99
6 Гуранг
8 Guru999

Следващият пример показва как това може да се направи.

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

Обяснение на кода:

  1. Тук в критериите за търсене използваме символа и $. Се използва, за да се увери, че низът започва с определен символ, а $ се използва, за да се гарантира, че низът завършва с определен символ. Така че, когато кодът се изпълни, той ще извлече само низа с името "Guru99".
  2. Printjson се използва за отпечатване на всеки документ, който се връща от заявката по-добре.

Ако командата се изпълни успешно, ще се покаже следният изход:

Изход:

В изхода е ясно видимо, че е извлечен низ "Guru99".

Образец, съвпадащ с $ опции

Когато използвате оператора на регулярни изрази, можете също да предоставите допълнителни опции, като използвате ключовата дума $ options . Да предположим например, че сте искали да намерите всички документи, които са имали „Gu“ в името на служителя си, независимо дали е чувствителен към малки или големи букви. Ако се желае такъв резултат, трябва да използваме опциите $ с параметър за нечувствителност към регистъра.

Следващият пример показва как това може да се направи.

Да приемем, че имаме същата колекция от служители, която има имената на полетата „Employeeid“ и „EmployeeName“.

Нека приемем също, че имаме следните документи в нашата колекция.

Идент. № на служителя Име на служителя
22. NewMartin
2 Мохан
3 Джо
4 MohanR
100 Гуру99
6 Гуранг
7 GURU99

Сега, ако изпълним същата заявка като в последната тема, никога няма да видим документа с "GURU99" в резултата. За да сме сигурни, че това влиза в набора от резултати, трябва да добавим параметъра $ I "I".

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

Обяснение на кода:

  1. Параметрите $ с параметър „I“ (което означава нечувствителност към регистъра) указва, че искаме да извършим търсенето, независимо дали намираме буквите „Gu“ с малки или главни букви.

Ако командата се изпълни успешно, ще се покаже следният изход:

Изход:

  1. Резултатът ясно показва, че въпреки че един документ има главни букви „Gu“, документът все пак се показва в набора от резултати.

Съвпадение на шаблон без оператора на регулярни изрази

Може да се направи и съвпадение на шаблони без оператора на регулярни изрази. Следващият пример показва как това може да се направи.

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

Обяснение на кода:

  1. Опциите "//" по същество означават да зададете критериите си за търсене в рамките на тези разделители. Следователно, ние посочваме / Gu /, за да намерим отново тези документи, които имат „Gu“ в името на EmployeeName.

Ако командата се изпълни успешно, ще се покаже следният изход:

Изход:

Резултатът ясно показва, че тези документи, в които името на служителя съдържа символите „Gu“, се връщат.

Извличане на последните 'n' документи от колекция

Има различни начини да получите последните n документи в колекция.

Нека разгледаме един от начините чрез следните стъпки

Следващият пример показва как това може да се направи.

Да приемем, че имаме същата колекция от служители, която има имената на полетата „Employeeid“ и „EmployeeName“.

Нека също така приемем, че имаме следните документи в нашата колекция:

Идент. № на служителя Име на служителя
22. NewMartin
2 Мохан
3 Джо
4 MohanR
100 Гуру99
6 Гуранг
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Обяснение на кода:

1) Когато правите заявки за документи, използвайте функцията за сортиране, за да сортирате записите в обратен ред въз основа на стойността на полето _id в колекцията. -1 основно показва сортиране на документите в обратен или низходящ ред, така че последният документ да стане първият показан документ.

2) След това използвайте ограничителната клауза, за да покажете само броя записи, които искате. Тук сме задали клауза за ограничение (2), така че тя ще извлече последните два документа.

Ако командата се изпълни успешно, ще се покаже следният изход:

Изход:

Резултатът ясно показва, че се показват последните два документа в колекцията. Следователно ясно показахме, че за да извлечем последните 'n' документи в колекцията, можем първо да сортираме документите в низходящ ред и след това да използваме клаузата за ограничение, за да върнем необходимия брой n 'документи.

Забележка : Ако търсенето се извършва на низ, който е по-голям от да кажем 38 000 знака, той няма да покаже правилните резултати.

Резюме:

  • Съответствието на шаблона може да бъде постигнато от оператора $ regex. Този оператор може да се използва за намиране на определени низове в колекцията.
  • Символът и $ може да се използва за точно търсене на текст, като се използва, за да се гарантира, че низът започва с определен символ, а $, за да се гарантира, че низът завършва с определен символ.
  • 'I' заедно с оператора $ regex може да се използва за определяне на нечувствителност към малки и малки букви, така че низовете да могат да се търсят дали са с малки или главни букви.
  • Разделителите // могат също да се използват за съвпадение на шаблони.
  • Използвайте комбинация от функцията за сортиране и ограничаване, за да върнете последните n документи в колекцията. Функцията за сортиране може да се използва за връщане на документите в низходящ ред, след което клаузата за ограничение може да се използва за ограничаване на броя на върнатите документи.