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

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

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

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

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

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

ID на служител Име на служителя
22 Нов Мартин
2 Мохан
3 Джо
4 Мохан Р
100 Guru99
6 Гуранг

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

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

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

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

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

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

Изход:

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

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

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

ID на служител Име на служителя
22 Нов Мартин
2 Мохан
3 Джо
4 Мохан Р
100 Guru99
6 Гуранг
8 Guru999

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

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

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

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

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

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

Изход:

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

В изхода ясно се вижда, че низът „Guru99“ е извлечен.

Съпоставяне на шаблони с $options

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

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

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

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

ID на служител Име на служителя
22 Нов Мартин
2 Мохан
3 Джо
4 Мохан Р
100 Guru99
6 Гуранг
7 ГУРУ99

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

Съпоставяне на шаблони с $options

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

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

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

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

Изход:

Съпоставяне на шаблони с $options

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

Съвпадение на образец без оператора regex

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

Съпоставяне на шаблони без Regex OperaTor

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

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

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

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

Изход:

Съпоставяне на шаблони без Regex OperaTor

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

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

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

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

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

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

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

ID на служител Име на служителя
22 Нов Мартин
2 Мохан
3 Джо
4 Мохан Р
100 Guru99
6 Гуранг
7 ГУРУ99

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

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

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

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

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

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

Изход:

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

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

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

Oбобщение

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