Вопрос по node.js, mongodb – Mongo Query с Regex в Node JS, работающем по переменному

14

У меня есть проблема здесь. Я хочу запросить мой 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 ... У меня он запущен, и он делает записи в db с помощью & quot; line_text & quot; содержащий "результат" в прямом смысле.

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

Ваш Ответ

4   ответа
4

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

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

ил

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

Попробуй это

db.testlogwiki.find({"line_text" : new RegExp(result) };
Теперь ты сможешь поднять голос Sergio Tulentsev
Ты святой. Приму это, когда вернусь домой (у меня есть время, когда я не могу принять). PinkElephantsOnParade
Надеюсь, что в вашей переменной нет специальных символов регулярных выражений, иначе это не удастся! John Culviner
2

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

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

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

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

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

https: //lodash.com/docs#escapeRegEx

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

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