【问题标题】:How to aggregate sum in MongoDB to get a total count?如何汇总 MongoDB 中的总和以获得总计数?
【发布时间】:2013-06-07 07:56:42
【问题描述】:

对于带有字段 { wins: Number } 的某些集合,我如何使用 MongoDB 聚合框架 来获取集合中所有文档的总获胜次数?

示例:

如果我有 3 个文档分别为 wins: 5wins: 8wins: 12,我如何使用 MongoDB 聚合框架返回总数,即 total: 25

【问题讨论】:

  • 使用$group 操作,如the docs 所示。
  • @JohnnyHK 我试过db.characters.aggregate([{$group:{_id:'id',wins:{$sum:1}}}]);,但没有任何运气。它返回我有多少 wins 字段,而不是来自获胜的值。
  • db.characters.aggregate( [ { $group: { _id: null, total: { $sum: "$wins" } } } ] )
  • @WiredPrairie 谢谢它的工作。您想将其发布为答案以便我接受吗?

标签: mongodb aggregation-framework


【解决方案1】:

总和

要在使用 MongoDB 的聚合框架时获得分组字段的总和,您需要使用 $group$sum

db.characters.aggregate([ { 
    $group: { 
        _id: null, 
        total: { 
            $sum: "$wins" 
        } 
    } 
} ] )

在这种情况下,如果您想获得所有wins 的总和,您需要使用$ 语法将字段名称引用为$wins,它只获取wins 的值来自分组文档的字段并将它们汇总在一起。

计数

您也可以通过传入特定值来sum 其他值(正如您在评论中所做的那样)。如果你有

{ "$sum" : 1 },

这实际上是所有wins 的计数,而不是总数。

【讨论】:

  • 如果这个查询需要很长时间,你会怎么做? (跨越许多文档)
  • 由于该算法必须扫描每个文档,因此您需要借助缓存、预先计算或过滤结果来减少花费的总时间。
  • 如何得到结果?我得到了一个光标。
  • 为什么需要[ ] ?没有它们也可以工作,即 db.characters.aggregate({$group ... }) 而不是 db.characters.aggregate([{$group ... }])
  • 哇,_id: null 是这里的关键。 +1 您尝试使用聚合框架而不考虑使用 _id: null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多