#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.