对于某些具有字段的集合,{ wins: Number }
我如何使用MongoDB Aggregation Framework来获取集合中所有文档的获胜总数?
例:
如果我有3个文件wins: 5
,wins: 8
,wins: 12
分别,我怎么可能使用MongoDB的聚合框架返回的总数,即total: 25
。
对于某些具有字段的集合,{ wins: Number }
我如何使用MongoDB Aggregation Framework来获取集合中所有文档的获胜总数?
如果我有3个文件wins: 5
,wins: 8
,wins: 12
分别,我怎么可能使用MongoDB的聚合框架返回的总数,即total: 25
。
db.characters.aggregate([{$group:{_id:'id',wins:{$sum:1}}}]);
但是没有运气。它返回wins
我有多少个字段,而不是获胜的值。
db.characters.aggregate( [ { $group: { _id: null, total: { $sum: "$wins" } } } ] )
Answers:
要在使用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
。
$group
所示的操作。