Возможно ли в MongoDB запрашивать шаблоны, соответствующие заданной строке?

#mongodb

#mongodb

Вопрос:

У меня есть система сообщений, в которой я хочу, чтобы вызывались разные обработчики сообщений в зависимости от шаблонов входящих сообщений.

У меня есть эта коллекция:

 [
    { Pattern: "^a", Handler: "Handler1" },
    { Pattern: "^b", Handler: "Handler2" },
    { Pattern: "^c", Handler: "Handler3" }
]
  

Для данного сообщения (строки) Теперь я хочу найти первый элемент
, в котором сообщение соответствует шаблону, а затем извлечь имя обработчика
.

То есть для сообщения «b bla bla bla» я хочу извлечь «Handler2».

Обратите внимание, я не хочу использовать запрос регулярных выражений для поиска некоторой строки в базе данных, все наоборот: я хочу найти элемент, имеющий шаблон, который соответствует заданной строке.

Мое решение прямо сейчас — извлечь весь список шаблонов, а затем выполнить итерацию и сопоставление по всем шаблонам в коде моего приложения, и это работает нормально, но мне интересно, есть ли какой-нибудь эффективный запрос mongo, который можно использовать вместо этого?

Ответ №1:

С вами должно быть все в порядке, как вы делаете это прямо сейчас, если количество шаблонов невелико.

Если у вас большое количество шаблонов, вы станете жертвой вариации проблемы остановки: нет простого способа узнать, соответствует ли шаблон (или нет), пока вы на самом деле не выполните его с помощью входной строки (думайте о шаблоне как о мини-программе).

Или: учитывая, что существует только конечный набор входных данных (что, вероятно, не так), вы могли бы сохранить все возможные входные данные и соответствующие им шаблоны в MongoDB.

Надеюсь, это поможет.

Ответ №2:

Вероятно, вам нужно самостоятельно выполнить проверку соответствия и применить ее, используя стиль map / reduce.