如何汇总 MongoDB 中的总和以获得总计数?

Posted

技术标签:

【中文标题】如何汇总 MongoDB 中的总和以获得总计数?【英文标题】:How to aggregate sum in MongoDB to get a total count? 【发布时间】: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 谢谢它的工作。您想将其发布为答案以便我接受吗? 【参考方案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

以上是关于如何汇总 MongoDB 中的总和以获得总计数?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中按列分组以获得总计数

MongoDB 聚合:从先前行的总和计算运行总计

汇总以仅保留总计并删除小计

将项目价格相加以获得总计

如何获得总和的总和和总和,这也是mongoDB中项目的总和

R中的汇总列总计[重复]