我有一个基本的用户集合,其中包含他们的 firstName
、lastName
和一些其他详细信息。
我将如何简单地通过两个名称的组合或部分搜索来搜索用户?
例如,对于一个集合:
{
firstName: Bob,
lastName: Jerry
}, {
firstName: Clark,
lastName: Mcbobby
}
如果搜索词是 bob
,则将返回两个用户,因为第一个文档 firstName
是 bob,最后一个用户 lastName
包含鲍勃
。如果 bob j
是搜索词,则只返回第一个文档,因为如果两个名称都合并,它等于匹配搜索词的 Bob Jerry
。
我尝试创建一个基本的 aggregate
来连接名称,然后进行匹配,尽管 Mongoose 一直向我抛出错误:Arguments must be aggregate pipeline operator
。
这是我当前的代码:
User.aggregate({
$project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } },
$match: {"name": {$regex: "/bob j/i"}}
}).exec(function(err, results) {
...
});
最佳答案
我发现您的代码中有几个错误导致了不希望的结果。
聚合管道接受聚合框架操作数组。在您的情况下,您缺少 []
运算符。应该是这样的
User.aggregate([{$project...},{$match...}])
在 $match 阶段,您使用的是正则表达式,如果您使用的是 /../
风格的正则表达式,则不需要将其包裹在字符串引号中。应该是 /bob j/i
这是完成的例子:
User.aggregate([
{$project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } }},
{$match: {"name": {$regex: /bob j/i}}}
]).exec(function(err, result){
console.log(result);
});
您应该会在屏幕上看到 [ { _id: 574c3e20be214bd4078a9149, name: 'Bob Jerry' } ]
。
https://stackoverflow.com/questions/37525675/
相关文章:
mongodb - 为启用身份验证的 mongodb 运行 mongostat 时出现问题
node.js - 我的 Electron 应用程序启动时如何启动 mongodb 服务
node.js - 如何使用 mongo/mongoose 连接远程数据库
mongodb - 如何从 mongodb 集合中删除空字符串?
ruby-on-rails - 在 Rails 控制台中列出所有 Mongoid 模型
mongodb - 使用 mongoose 正则表达式与文本在 mongodb 中搜索
node.js - Mongoose 在未指定的时间段后停止响应
node.js - docker compose = ECONNREFUSED 中的 NodeJS