16

我这里有问题。我想在我的 Node JS 文件中使用 LIKE 之类的东西来查询我的 MongoDB,以获取传统的关系数据库。问题是我想要喜欢的东西不是文字......它是一个变量!到目前为止,我还没有找到这样做的好方法。这是我拍摄的“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 制作的......我让它运行,这确实对带有“line_text”的 db 条目确实包含“结果”字面意思。

这似乎是一个非常简单的问题......

4

4 回答 4

37

试试这个:

db.testlogwiki.find({"line_text" : new RegExp(result) };
于 2012-05-23T21:24:43.670 回答
4

两者都会起作用

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

或者

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
于 2015-01-23T19:04:32.780 回答
2

您也可以使用 $regex 选项。

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
于 2013-02-19T00:03:26.093 回答
2

根据您的输入变量,所有其他答案可能会失败

您可以按照其他人的指示使用 RegExp,但您必须转义特殊的正则表达式字符,否则可能会失败。

Lodash 有一个功能可以做到这一点(如果你不使用它,你可能应该使用它,它添加了很多甚至在 ES6+ 规范中都没有的糖)

https://lodash.com/docs#escapeRegExp

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

于 2017-06-15T14:28:03.880 回答