如何使用MongoDB聚合框架计算满足特定条件的组数?

时间:2016-03-01 15:36:13

标签: mongodb mongodb-query aggregation-framework node-mongodb-native

我有一个使用几个组的MongoDB聚合操作:

5.times { |i| puts i }

返回以下数据:

{ $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 } ] } 字段)的用户总数。在这种情况下,它将是:

count

因为只有{ total: 1 } 只有一个以上的项目(user2> 1)。

我尝试添加以下群组操作无效:

count

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以像在管道中添加以下三个聚合阶段一样简单地实现所需的结果:

{$match: {count: {$gt: 1}}}
{$group: {_id: null, total: {$sum: 1}}}
{$project: {_id: 0, total: 1}}
  1. 作为chridam mentined,您可以使用 $match 阶段来过滤所有拥有1个以上项目的用户。
  2. 然后使用其他 $group 阶段来计算此类用户的总数。
  3. 第三步只是化妆品,只留下total字段。