5

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

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

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

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

4

4 回答 4

6

您需要首先构建一个正则表达式应该尝试这样的事情:

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

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

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

我已将正则表达式作为左根正则表达式包含在内,以利用索引(如果可能,总是推荐用于性能)。更多请看这里:

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

于 2012-08-30T08:31:04.537 回答
1

我是这样做的

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

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

于 2019-12-22T21:17:59.343 回答
0

试试这个:

var keyword = req.params.keywords;
var regex = RegExp(".*" + keyword + ".*");
Note.find({noteBody: regex, userID: userID})
于 2019-02-07T19:14:09.330 回答
0

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

于 2019-02-14T18:00:34.463 回答