mongodb - MongoDB聚合框架如何统计满足一定条件的组数?

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

我有一个使用几个组的 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}}
  1. 作为chridam mentined你可以有一个 $match 阶段来过滤拥有超过 1 个项目的所有用户。
  2. 然后使用另一个$group阶段来统计此类用户的总数。
  3. 第三步只是化妆品,只留下total字段。

关于mongodb - MongoDB聚合框架如何统计满足一定条件的组数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727021/

相关文章:

node.js - Mongoose findById 查询不返回结果。对象始终为空。

node.js - MongoError : Invalid Operation, 没有批量操作

MongoDB 游标不返回所有文档

MongoDB 使用 or 查询超集中的子集

mongodb - 使用 ngrok 隧道化 mongodb

arrays - 如何在数组中搜索另一个数组中存在的值并将找到的值的索引输出到 [mongodb] 中的新数组中

java - MongoDB/Java : Inserting Document in Sub-Document

java - 如何使用 Java 运行 .group()

node.js - 如何使用node js重命名mongodb中的列名

javascript - Mongoose 查询不返回错误