English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB продвинутый учебник
в отличии от текстового поиска, нам не нужно выполнять никакую настройку или команду, чтобы использовать регулярные выражения. Регулярные выражения часто используются во всех языках для поиска шаблонов или слов в любой строке. MongoDB также использует оператор $regex для предоставления функции регулярных выражений для соответствия строковым шаблонам. MongoDB использует PCRE (Perl Compatible Regular Expressions) в качестве языка регулярных выражений.
предположим, что мы уже работаем с базой данных под именем posts вбили документ в базу данных, как показано ниже
>db.posts.insert( { "post_text": "наслаждайтесь статьями о mongodb на w3codebox", "tags": [ "mongodb", "w3codebox" ] } WriteResult({ "nInserted": 1 })
Ниже regex запрос ищет все帖子, содержащие строку w3codebox–
>db.posts.find({post_text:{$regex:"w3codebox"}}).pretty(){ "_id": ObjectId("5dd7ce28f1dd4583e7103fe0"), "post_text": "наслаждайтесь статьями о mongodb на w3codebox", "tags": [ "mongodb", "w3codebox" ] } { "_id": ObjectId("5dd7d111f1dd4583e7103fe2"), "post_text": "наслаждайтесь статьями о mongodb на w3codebox", "tags": [ "mongodb", "w3codebox" ] } >
Этот же запрос также можно записать как-
>db.posts.find({post_text:/w3codebox/})
Чтобы сделать поиск не зависимым от регистра, мы используем$options
параметр с value$i
следующие команды будут искать строки с这个词w3codebox
без учета регистра или строчных букв-
>db.posts.find({post_text:{$regex:"w3codebox",$options:"$i"}})
одним из результатов запроса является следующий документ, который содержитw3codebox
слова в различных ситуациях-
{ "_id": ObjectId("53493d37d852429c10000004"), "post_text": "привет! это моя запись на w3codebox", "tags" : [ "w3codebox" ] }
Мы также можем использовать концепцию регулярных выражений в полях массива. Когда мы реализуем функцию тегов, это особенно важно. Поэтому, если вы хотите искать все слова с тегами, которые начинаются с слова tutorial (учебник или tutorialpoint или tutorialphp), вы можете использовать следующий код-
>db.posts.find({tags:{$regex:"tutorial"}})
Если поле документаиндексированный
запрос будет использовать значения индекса для соответствия регулярному выражению. По сравнению с сканированием всего набора данных регулярным выражением, это делает поиск очень быстрым.
Если регулярное выражениевыражение префикса
Тогда все соответствующие элементы должны начинаться с某个 строки. Например, если регулярное выражение^tut
Тогда запрос должен искать только те строки, которые начинаются сtut
.