Mongo Query с Regex в Node JS, работающем по переменному

У меня есть проблема здесь. Я хочу запросить мой MongoDB в моем файле Node JS, используя что-то вроде LIKE для обычного реляционного БД. Проблема в том, что я хочу, чтобы ЛЮБОВЬ не была буквальной... это переменная! Я пока не нашел хорошего способа сделать это. Вот был снимок "первая попытка durrr", который я сделал:

var result = postData.replace(/\+/g,' ').substring(5);
db.testlogwiki.find({"line_text" : /result/ };
//predictably only matches to the literal "result" as opposed to my variable

testlogwiki сделан в Mongo... У меня он работает, и это делает Mach для записи в БД с "line_text", содержащим "result" буквально.

Это кажется очень простым вопросом...

4 ответа

Решение

Попробуй это:

db.testlogwiki.find({"line_text" : new RegExp(result) };

Оба будут работать

db.testlogwiki.find({"line_text" : new RegExp(result, 'i') }; // to make this case insensitive 

или же

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );

Все остальные ответы могут потерпеть неудачу в зависимости от вашей входной переменной

Вы можете использовать RegExp, как указали другие, но вы должны экранировать специальные символы регулярных выражений, иначе это может не сработать.

У Lodash есть функция для этого (если вы ее не используете, то, вероятно, так и должно быть, она добавляет много сахара, которого нет даже в спецификации ES6+)

https://lodash.com/docs

db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') };

Вы также можете использовать опцию $regex.

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
Другие вопросы по тегам