MongoDB регулярное выражение
Регулярные выражения используются для описания использования одной строки, в соответствии с серией синтаксической строки правил соответствия.
Многие языки программирования поддерживают использование регулярных выражений для операций со строками.
MongoDB использует $ оператор регулярных выражений , чтобы установить строку , соответствующую регулярному выражению.
MongoDB использует PCRE (Perl Compatible Regular Expression) в качестве языка регулярных выражений.
В отличие от полнотекстового поиска, мы используем регулярное выражение не нужно делать какие-либо конфигурации.
Рассмотрим следующий документ структуру набора сообщений, документ содержит содержание статьи и этикетки:
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
Использование регулярных выражений
Следующие команды используют регулярные выражения для поиска статья содержит w3cschool.cc строки:
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})
Приведенный выше запрос также можно записать в виде:
>db.posts.find({post_text:/w3cschool.cc/})
Независимый от регистра регулярные выражения
Если вам нужно извлечь не чувствительны к регистру, мы можем установить $ варианты, как $ я.
Следующая команда найдет регистрозависимую строку w3cschool.cc:
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})
Коллекция будет возвращать все данные, содержащие строку w3cschool.cc не чувствителен к регистру:
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }
Элементы массива с использованием регулярных выражений
Мы также можем использовать регулярные выражения в поле массива для поиска контента. Это полезно в реализации этикетке, если вам нужно найти ярлык содержит данные (учебник или обучающие программы или tutorialpoint или tutorialphp) учебник в начале, вы можете использовать следующий код:
>db.posts.find({tags:{$regex:"tutorial"}})
Оптимизация регулярных выражений для запроса
- Если поле индекс документа задан, то использование индекса по сравнению с регулярным выражением, соответствующим, чтобы найти все данные запросы быстрее.
- Если регулярное выражение является выражением префикс, все данные соответствия будут указаны префикс строки для запуска. Например: Если регулярное выражение ^ репетит, репетит запрос будет выглядеть на начало строки.
Существует использование регулярных выражений Есть две точки , чтобы отметить:
Регулярные выражения с помощью переменных. Обязательно используйте комбинацию строки Eval будет преобразовывать после того, как не может быть непосредственно переданы выражения конкатенации. В противном случае нет никакого сообщения об ошибке, но результат пуст! Примерами могут служить следующие:
var name=eval("/" + 变量值key +"/i");
Ниже приводится нечеткое запрос содержит название ключевого слова не чувствительны к регистру:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}