Учебники

19) Регулярные выражения

Регулярные выражения используются для сопоставления с образцом, который в основном используется для поиска строк в документах.

Иногда при получении документов в коллекции вы можете не знать точно, какое именно значение поля нужно искать. Следовательно, можно использовать регулярные выражения, чтобы помочь в извлечении данных на основе сопоставления с шаблоном поиска.

В этом уроке вы узнаете –

Использование оператора $ regex для сопоставления с образцом

Оператор регулярных выражений в MongoDB используется для поиска определенных строк в коллекции. В следующем примере показано, как это можно сделать.

Давайте предположим, что у нас есть одна и та же коллекция Employee с именами полей «Employeeid» и «EmployeeName». Давайте также предположим, что у нас есть следующие документы в нашей коллекции.

Идентификатор сотрудника Имя сотрудника
22 NewMartin
2 Mohan
3 Джо
4 MohanR
100 Guru99
6 Gurang

Здесь, в приведенном ниже коде, мы использовали оператор регулярных выражений для определения критериев поиска.

Учебник по регулярным выражениям MongoDB

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

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

  1. Здесь мы хотим найти все имена сотрудников, в которых есть символы «Gu». Следовательно, мы указываем оператор $ regex, чтобы определить критерии поиска ‘Gu’
  2. Printjson используется для лучшей печати каждого документа, который возвращается запросом.

Если команда выполнена успешно, будет показан следующий вывод:

Вывод:

Учебник по регулярным выражениям MongoDB

Вывод ясно показывает, что возвращаются те документы, в которых Имя сотрудника содержит символы «Gu».

Если предположить, что ваша коллекция имеет следующие документы с дополнительным документом, который содержит имя сотрудника как «Guru999». Если вы ввели критерии поиска как «Guru99», он также вернул бы документ с «Guru999». Но предположим, что если мы этого не хотим и хотим только вернуть документ с «Guru99». Тогда мы можем сделать это с точным сопоставлением с образцом. Для точного сопоставления с образцом мы будем использовать символы ^ и $. Мы добавим символ ^ в начале строки и $ в конце строки.

Идентификатор сотрудника Имя сотрудника
22 NewMartin
2 Mohan
3 Джо
4 MohanR
100 Guru99
6 Gurang
8 Guru999

В следующем примере показано, как это можно сделать.

Учебник по регулярным выражениям MongoDB

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

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

  1. Здесь в критериях поиска мы используем символ ^ и $. ^ Используется, чтобы убедиться, что строка начинается с определенного символа, а $ используется для того, чтобы строка заканчивалась определенным символом. Поэтому, когда код выполняется, он извлекает только строку с именем «Guru99».
  2. Printjson используется для лучшей печати каждого документа, который возвращается запросом.

Если команда выполнена успешно, будет показан следующий вывод:

Вывод:

Учебник по регулярным выражениям MongoDB

В выводе ясно видно, что строка “Guru99” выбрана.

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

При использовании оператора регулярных выражений можно также указать дополнительные параметры с помощью ключевого слова $ options . Например, предположим, что вы хотели найти все документы с именем «Gu» в имени сотрудника, независимо от того, были ли они чувствительны к регистру или нечувствительны. Если такой результат желателен, тогда нам нужно использовать $ options с параметром нечувствительности к регистру.

В следующем примере показано, как это можно сделать.

Давайте предположим, что у нас есть одна и та же коллекция Employee с именами полей «Employeeid» и «EmployeeName».

Давайте также предположим, что у нас есть следующие документы в нашей коллекции.

Идентификатор сотрудника Имя сотрудника
22 NewMartin
2 Mohan
3 Джо
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Теперь, если мы выполним тот же запрос, что и в предыдущем разделе, мы никогда не увидим документ с «GURU99» в результате. Чтобы убедиться, что это входит в набор результатов, нам нужно добавить параметр $ options «I».

Учебник по регулярным выражениям MongoDB

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

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

  1. Параметр $ options с параметром ‘I’ (что означает нечувствительность к регистру) указывает, что мы хотим выполнить поиск независимо от того, найдем ли мы буквы Gu в нижнем или верхнем регистре.

Если команда выполнена успешно, будет показан следующий вывод:

Вывод:

Учебник по регулярным выражениям MongoDB

  1. Вывод ясно показывает, что, хотя один документ имеет верхний регистр ‘Gu’, документ все равно отображается в наборе результатов.

Сопоставление с образцом без оператора регулярных выражений

Можно также выполнить сопоставление с шаблоном без оператора регулярных выражений. В следующем примере показано, как это можно сделать.

Учебник по регулярным выражениям MongoDB

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

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

  1. Параметр «//» в основном означает указание критериев поиска в этих разделителях. Следовательно, мы указываем / Gu /, чтобы снова найти те документы, которые имеют ‘Gu’ в их EmployeeName.

Если команда выполнена успешно, будет показан следующий вывод:

Вывод:

Учебник по регулярным выражениям MongoDB

Вывод ясно показывает, что возвращаются те документы, в которых Имя сотрудника содержит символы «Gu».

Получение последних ‘n’ документов из коллекции

Существуют различные способы получить последние n документов в коллекции.

Давайте посмотрим на один из способов с помощью следующих шагов

В следующем примере показано, как это можно сделать.

Давайте предположим, что у нас есть одна и та же коллекция Employee с именами полей «Employeeid» и «EmployeeName».

Также предположим, что в нашей коллекции есть следующие документы:

Идентификатор сотрудника Имя сотрудника
22 NewMartin
2 Mohan
3 Джо
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Учебник по регулярным выражениям MongoDB

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

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

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

2) Затем используйте предложение limit, чтобы просто отобразить нужное количество записей. Здесь мы установили предложение limit (2), чтобы оно получало последние два документа.

Если команда выполнена успешно, будет показан следующий вывод:

Вывод:

Учебник по регулярным выражениям MongoDB

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

Примечание . Если поиск выполняется по строке, длина которой превышает 38 000 символов, результаты не будут отображаться правильно.

Резюме:

  • Сопоставление с образцом может быть достигнуто оператором $ regex. Этот оператор может использоваться для поиска определенных строк в коллекции.
  • Символ ^ и $ можно использовать для точного поиска текста, причем ^ используется для того, чтобы убедиться, что строка начинается с определенного символа, а $ используется для гарантии того, что строка заканчивается определенным символом.
  • ‘I’ вместе с оператором $ regex можно использовать для указания нечувствительности к регистру, чтобы можно было искать строки независимо от того, находятся они в нижнем или верхнем регистре.
  • Разделители // также можно использовать для сопоставления с образцом.
  • Используйте комбинацию sort и функцию limit, чтобы вернуть последние n документов в коллекции. Функция сортировки может использоваться для возврата документов в порядке убывания, после чего можно использовать предложение limit для ограничения количества возвращаемых документов.