我正在使用模块“ mongodb”从节点js API查询mongodb。我正在尝试通过搜索查询来搜索联系人文档。相同的选择器如下:
selector['users.name'] = {$regex: new RegExp(params.query), $options:"i"}
假设用户名是“ Sagar Gopale”,搜索查询是“ sagar”或什至是“ gopale”,则上述方法可以正常工作并正确返回结果。但是,如果我输入搜索查询为“ sagar gopale”,它将返回空结果。有人可以为我提供解决方案,以便我输入包含空格的搜索查询吗?
提前致谢。
最佳答案
实际上,如果您坚持使用regexp
方式,将会遇到很多困难,我建议您创建一个text
索引:
collection.createIndex({"users.name" : "text"});
然后何时搜索:
db.collection('users').find({
$text: {
$search: params.query,
$caseSensitive: false,
}
});
这样,当您使用“ Sagar”,“ sagar”,“ sagar gopa”,“ gopale sagar”以及这些2的许多组合时,您将获得结果。
如果您具有自动完成功能,或者客户不知道确切的名称,则此方法非常有效。 Mongo处理了会匹配字母的强文本搜索算法,即使它们的顺序不正确。