如何汇总 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: 5
、wins: 8
、wins: 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 中的总和以获得总计数?的主要内容,如果未能解决你的问题,请参考以下文章