如何使用MongoDB node.js驱动程序进行包含查询?

时间:2012-08-30 07:45:53

标签: node.js mongodb

我正在尝试搜索包含某个子字符串的项目,但我没有得到任何结果(即使我知道数据适合查询,包括大小写):

collection.find({name: "/.*" + keyword + ".*/"}).toArray(function(err, items)

这与包含关键字的所有内容不匹配吗?它只返回一个空对象。

我只是在ExpressJS应用程序中使用常规MongoDB驱动程序。

4 个答案:

答案 0 :(得分:5)

你需要首先构建一个正则表达式,如下所示:

var regex = RegExp("/.*" + keyword + ".*/")

然后将变量传递给查询。我通常发现将查询作为变量更容易并将其传递给:

var query = { FieldToSearch: new RegExp('^' + keyword) };
collection.find(query).toArray(...)

我已将正则表达式作为左根型正则表达式包含在内以利用索引(如果可能,始终建议使用索引)。如需了解更多信息,请点击此处:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

答案 1 :(得分:0)

尝试:

var keyword = req.params.keywords;
var regex = RegExp(".*" + keyword + ".*");
Note.find({noteBody: regex, userID: userID})

答案 2 :(得分:0)

我从请求参数中获得了关键字,我想使用这些关键字从noteBody中进行搜索,现在这些关键字是一个变量。如果要在数据库查找中放置变量,则格式必须为var regex = RegExp(“。” +关键字+“。”)。希望这可以帮助。谢谢

答案 3 :(得分:0)

我是这样做的

    keyword = "text_to_search";
    collection.find({name: {$Regex: keyword, $options:$i }})

我曾经用$ i使查询不区分大小写,但是您也可以使用其他选项