English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

онлайн инструмент

MongoDB базовый учебник

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

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.