MongoDB $regex: 17 примеров запросов с регулярками

Оператор $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 и другим.

Что будем искать? Например,программа