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+)
db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') };
Вы также можете использовать опцию $regex.
db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );