Поместить переменную в $ regex в mongoDB query [duplicate]

В некоторых ситуациях regexp может помочь. Вот пример, который я проверил в Oracle, и он работает.

select * from my_table where REGEXP_LIKE (search_column, 'value1|value2')

Но с ним существует ряд недостатков:

  1. Любой использованный столбец должен быть преобразован в varchar / char, по крайней мере, неявно.
  2. Нужно быть осторожным со специальными символами.
  3. Это может замедлить производительность - в моем случае версия IN использует сканирование индекса и диапазона, а версия REGEXP выполняет полное сканирование.
2
задан Michel Floyd 1 November 2015 в 00:42
поделиться

3 ответа

Действительно. Возможно, вы не понимаете, что "/" не совпадает с /, а у последнего нет семантики для конкатенации (например, + для строк) как издалека, как я знаю (но я могу ошибаться). Последний синтаксис является встроенным / сокращенным конструктором для класса RegExp. Тем не менее, это легко исправить, просто создайте регулярное выражение с помощью new RegExp.

В вашем случае я бы рекомендовал использовать конструкцию mongodb $regex:

Items.find({"description": {$regex: ".*" + variable + ".*"}}).fetch();

Подробнее см. документацию на $regex .

13
ответ дан Christian Fritz 15 August 2018 в 15:51
поделиться
  • 1
    Спасибо Кристиан Фриц, он отлично работает. – user3451784 31 October 2015 в 21:43
  • 2
    рад, что он работает. Пожалуйста, не забудьте принять ответ и проголосовать. Благодарю. – Christian Fritz 31 October 2015 в 21:51

Ответ - каждое ключевое слово по поиску

Items.find({"description": {
                        '$regex': new RegExp(variable, "i")
                    }}).fetch();
0
ответ дан Aboo Pallikara 15 August 2018 в 15:51
поделиться

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

new RegExp(".*"+keyword+".*", "i")
0
ответ дан Duane Lortie 15 August 2018 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: