在正在运行的节点JS中使用正则expression式的Mongo查询variables
我在这里有一个问题。 我想在我的Node JS文件中查询我的MongoDB,使用像LIKE这样的常规关系数据库。 问题是我想要的东西不是一个文字…这是一个variables! 到目前为止,我还没有find好的办法。 这是我拿到的“durrr first try”镜头:
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中创build的…我已经运行了,而且这样做确实与包含“result”的“line_text”的数据库条目差不多。
这似乎是一个非常简单的问题
试试这个:
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'] } } );
您也可以使用$ regex选项。
db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
所有其他的答案可能会失败,取决于你的inputvariables
您可以像其他人一样使用RegExp,但您必须转义特殊的正则expression式字符,否则可能会失败。
Lodash有一个function可以做到这一点(如果你不使用它,你应该会增加很多甚至在ES6 +规范中没有的糖)
https://lodash.com/docs#escapeRegExp
db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') };