Учебники

MongoDB — регулярное выражение

Регулярные выражения часто используются на всех языках для поиска шаблона или слова в любой строке. MongoDB также обеспечивает функциональность регулярных выражений для сопоставления строковых шаблонов с использованием оператора $ regex . MongoDB использует PCRE (Perl-совместимое регулярное выражение) в качестве языка регулярных выражений.

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

Рассмотрим следующую структуру документа в коллекции сообщений, содержащей текст сообщения и его теги:

{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}

Использование выражения регулярных выражений

Следующий запрос регулярного выражения ищет все сообщения, содержащие в нем строку tutorialspoint

>db.posts.find({post_text:{$regex:"tutorialspoint"}})

Этот же запрос также может быть записан как —

>db.posts.find({post_text:/tutorialspoint/})

Использование выражения регулярных выражений с учетом регистра

Чтобы сделать поиск нечувствительным к регистру, мы используем параметр $ options со значением $ i . Следующая команда будет искать строки, имеющие слово tutorialspoint , независимо от меньшего или заглавного регистра —

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

Одним из результатов, возвращаемых этим запросом, является следующий документ, который содержит слово tutorialspoint в разных случаях:

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
} 
 

Использование регулярных выражений для элементов массива

Мы также можем использовать концепцию регулярных выражений в поле массива. Это особенно важно, когда мы реализуем функциональность тегов. Итак, если вы хотите найти все сообщения, имеющие теги, начинающиеся со слова tutorial (или tutorial, или tutorial, или tutorialpoint, или tutorialphp), вы можете использовать следующий код:

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

Если регулярное выражение является префиксным выражением , все совпадения должны начинаться с определенных строковых символов. Например, если выражение регулярного выражения равно ^ tut , запрос должен искать только те строки, которые начинаются с tut .