我有一个使用几个组的 MongoDB 聚合操作:
{ $group: { "_id": { "vid": "$visitor_id", "pid":"$project.id" } } }
{ $group: { "_id": "$_id.vid", "count": { $sum: 1} } }
返回以下数据:
{
"results": [
{
"_id": "user1",
"count": 1
},
{
"_id": "user2",
"count": 2
},
{
"_id": "user3",
"count": 1
}
]
}
我怎样才能返回拥有超过 1 个项目的用户总数(count
字段)。在这种情况下,它将类似于:
{
total: 1
}
因为只有 user2
有超过 1 个项目(count
> 1)。
我已经尝试添加以下组操作但无济于事:
{
$group: {
"_id": null,
count: {
$sum: {$cond: [{$gt: ['$_id.count', 1]}, 1, 0]}
}
}
}
有什么想法吗?
最佳答案
只需将以下三个聚合阶段添加到您的管道中,您就可以轻松获得所需的结果:
{$match: {count: {$gt: 1}}}
{$group: {_id: null, total: {$sum: 1}}}
{$project: {_id: 0, total: 1}}
- 作为chridam mentined你可以有一个
$match
阶段来过滤拥有超过 1 个项目的所有用户。 - 然后使用另一个
$group
阶段来统计此类用户的总数。 - 第三步只是化妆品,只留下
total
字段。
关于mongodb - MongoDB聚合框架如何统计满足一定条件的组数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727021/