Регулярний вираз MongoDB (регулярний вираз) із прикладами

Зміст:

Anonim

Регулярні вирази використовуються для узгодження зразків, що в основному стосується рядків висновків у документах.

Іноді, отримуючи документи в колекції, ви можете точно не знати, яке саме значення поля потрібно шукати. Отже, можна використовувати регулярні вирази, щоб допомогти отримати дані на основі значень пошуку, що відповідають шаблону.

У цьому підручнику ви дізнаєтесь -

  • Використання оператора $ regex для зіставлення зразків
  • Зіставлення шаблону з $ options
  • Зіставлення шаблону без оператора регулярного виразу
  • Отримання останніх 'n' документів із колекції

Використання оператора $ regex для зіставлення зразків

Оператор регулярного виразу в MongoDB використовується для пошуку конкретних рядків у колекції. Наступний приклад показує, як це можна зробити.

Припустимо, що у нас є та сама колекція Employee, яка має імена полів "Employeeid" та "EmployeeName". Нехай також припустимо, що в нашій колекції є такі документи.

Ідентифікатор працівника ім'я працівника
22 NewMartin
2 Мохан
3 Джо
4 МоханР
100 Гуру99
6 Гуранг

Тут, у наведеному нижче коді, ми використали оператор регулярних виразів для визначення критеріїв пошуку.

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

Пояснення коду:

  1. Тут ми хочемо знайти всі імена працівників, на яких є символи „Gu“. Отже, ми визначаємо оператор $ regex для визначення критеріїв пошуку для 'Gu'
  2. Printjson використовується для кращого друку кожного документа, який повертається запитом.

Якщо команда виконана успішно, буде показано наступний результат:

Вихід:

Результат чітко показує, що повертаються ті документи, в яких ім’я працівника містить символи „Gu“.

Якщо припустимо, у вашій колекції є такі документи з додатковим документом, який містив ім’я працівника як „Guru999”. Якщо ви ввели критерій пошуку як "Guru99", він також поверне документ, який містив "Guru999". Але припустимо, якщо ми цього не хотіли і хотіли лише повернути документ із "Гуру99". Тоді ми можемо зробити це за допомогою точного збігу шаблонів. Для точного збігу зразків ми будемо використовувати символ і $. Ми додамо символ на початку рядка та $ в кінці рядка.

Ідентифікатор працівника ім'я працівника
22 NewMartin
2 Мохан
3 Джо
4 МоханР
100 Гуру99
6 Гуранг
8 Гуру999

Наступний приклад показує, як це можна зробити.

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

Пояснення коду:

  1. Тут у критеріях пошуку ми використовуємо символ і $. Значок використовується для того, щоб рядок починався з певного символу, а $ - для того, щоб рядок закінчувався певним символом. Отже, коли код виконується, він витягує лише рядок із назвою "Guru99".
  2. Printjson використовується для кращого друку кожного документа, який повертається запитом.

Якщо команда виконана успішно, буде показано наступний результат:

Вихід:

На виході чітко видно, що отримано рядок "Guru99".

Зіставлення шаблону з $ options

Використовуючи оператор регулярного виразу, можна також надати додаткові опції, використовуючи ключове слово $ options . Наприклад, припустимо, ви хотіли знайти всі документи, у яких в імені працівника було "Гу", незалежно від того, чи було воно чутливим до регістру чи нечутливим. Якщо такий результат бажаний, тоді нам потрібно використовувати параметри $ з параметром нечутливості до регістру.

Наступний приклад показує, як це можна зробити.

Припустимо, що у нас є та сама колекція Employee, яка має імена полів "Employeeid" та "EmployeeName".

Нехай також припустимо, що в нашій колекції є такі документи.

Ідентифікатор працівника ім'я працівника
22 NewMartin
2 Мохан
3 Джо
4 МоханР
100 Гуру99
6 Гуранг
7 ГУРУ99

Тепер, якщо ми виконаємо той самий запит, що і в минулій темі, ми ніколи не побачимо документ із "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" у своєму Імені Співробітника.

Якщо команда виконана успішно, буде показано наступний результат:

Вихід:

Результат чітко показує, що повертаються ті документи, в яких ім’я працівника містить символи „Gu“.

Отримання останніх 'n' документів із колекції

Існують різні способи отримання останніх російських документів у колекції.

Давайте розглянемо один із шляхів за допомогою наступних кроків

Наступний приклад показує, як це можна зробити.

Припустимо, що у нас є та сама колекція Employee, яка має імена полів "Employeeid" та "EmployeeName".

Нехай також припустимо, що в нашій колекції є такі документи:

Ідентифікатор працівника ім'я працівника
22 NewMartin
2 Мохан
3 Джо
4 МоханР
100 Гуру99
6 Гуранг
7 ГУРУ99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Пояснення коду:

1) При запиті документів використовуйте функцію сортування для сортування записів у зворотному порядку на основі значення поля _id у колекції. -1 в основному вказує на сортування документів у зворотному або низхідному порядку, так що останній документ стає першим документом для відображення.

2) Потім використовуйте пункт limit, щоб просто відобразити потрібну кількість записів. Тут ми встановили обмежувальне застереження (2), тож воно отримає два останні документи.

Якщо команда виконана успішно, буде показано наступний результат:

Вихід:

Вихідні дані чітко показують, що відображаються два останні документи у колекції. Отже, ми чітко показали, що для отримання останніх 'n' документів у колекції, ми можемо спочатку відсортувати документи за спаданням, а потім використати пункт limit, щоб повернути 'n' кількість необхідних документів.

Примітка : Якщо пошук виконується в рядку, який перевищує, скажімо, 38000 символів, він не відображатиме правильних результатів.

Короткий зміст:

  • Зіставлення зразків може бути досягнуто оператором $ regex. Цей оператор можна використовувати для пошуку певних рядків у колекції.
  • Символ і $ можна використовувати для точного пошуку тексту, використовуючи ^, щоб переконатися, що рядок починається з певного символу, а $, щоб переконатися, що рядок закінчується певним символом.
  • "I" разом з оператором $ regex можна використовувати для вказівки на нечутливість до регістру, щоб можна було шукати рядки, чи є вони малими чи великими літерами.
  • Розділювачі // також можна використовувати для узгодження зразків.
  • Використовуйте комбінацію функції сортування та обмеження, щоб повернути останні n документів у колекції. Функція сортування може бути використана для повернення документів у порядку зменшення, після чого пункт обмеження може бути використаний для обмеження кількості повернених документів.