Оператор $regex в MongoDB позволяет осуществлять поиск документов не только по точным значениям, но и с использованием регулярных выражений.
Синтаксис и параметры
Синтаксис запроса с использованием $regex:
{ поле: { $regex: /шаблон/[опции] } } или { поле: { $regex: "шаблон", $options: "опции" } }
- поле: имя поля, в котором выполняется поиск.
- /шаблон/: регулярное выражение, заключенное в косые скобки.
- опции: модификаторы, управляющие поведением поиска (например, i для игнорирования регистра). Опции могут указываться после шаблона или отдельно, используя оператор $options.
Примеры использования
Пример 1: Поиск без учёта регистра
Запрос: { city: { $regex: /tone/i } }
Этот запрос найдет все документы, где значение поля city содержит «tone», независимо от регистра. Опция i обеспечивает регистронезависимый поиск.
Пример 2: Поиск с использованием $options
Запрос: { deal: { $regex: "aDeal", $options: "i" } }
Этот запрос ищет в поле deal значения, начинающиеся с «a» и заканчивающиеся на «Deal», без учёта регистра. Результаты должны точно соответствовать шаблону «aDeal».
Пример 3: Регистрозависимый поиск
Запрос: { state: { $regex: /CA/ } }
Этот запрос найдет все документы, где значение поля state содержит «CA» с учетом регистра.
Практическое применение (коллекция persons)
Пример 4: Поиск по части имени
Для поиска персон, имена которых содержат «eral», используется запрос:
db.persons.find({ name: { $regex: /eral/i } })
Опция i делает поиск регистронезависимым.
Пример 5: Использование $options
Альтернативный запрос с использованием $options:
db.persons.find({ name: { $regex: "rao", $options: "i" } })
Аналогичен предыдущему примеру.
Пример 6: Регистрозависимый поиск и символ начала строки
Регистрозависимый поиск, начинающийся с указанной подстроки, достигается добавлением символа ^ в начало регулярного выражения.
Пример 7: Использование кавычек вместо косых черт
Вместо косых черт можно использовать кавычки:
db.persons.find({ name: { $regex: "rao" } })
Результат аналогичен использованию косых черт.
Оператор $regex — мощный инструмент для поиска с использованием регулярных выражений. Запросы с $regex могут потреблять значительные серверные ресурсы, поскольку не используют индексы. Индексы будут рассмотрены позже. После изучения запросов, мы перейдём к методам обновления документов, таким как update, updateMany, replaceOne и другим.