我正在使用模块“ 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处理了会匹配字母的强文本搜索算法,即使它们的顺序不正确。

07-28 11:10