我有一个集合foo
:
{ "_id" : ObjectId("5837199bcabfd020514c0bae"), "x" : 1 }
{ "_id" : ObjectId("583719a1cabfd020514c0baf"), "x" : 3 }
{ "_id" : ObjectId("583719a6cabfd020514c0bb0") }
我使用此查询:
db.foo.aggregate({$group:{_id:1, avg:{$avg:"$x"}, sum:{$sum:1}}})
然后我得到一个结果:
{ "_id" : 1, "avg" : 2, "sum" : 3 }
{$sum:1}
在此查询中的含义是什么?
答案 0 :(得分:9)
在$ group阶段中使用时,$ sum具有以下语法,并返回将指定表达式应用于按键共享同一组的一组文档中的每个文档所产生的所有数值的总和:
{$ sum:<表达> }
由于在您的示例中表达式为1
,因此它将为组中的每个文档聚合一个值,从而产生每个组的文档总数。
答案 1 :(得分:2)
基本上它会为每一行添加表达式的值。在这种情况下,因为行数是3所以它将是1 + 1 + 1 = 3。有关详细信息,请查看mongodb文档https://docs.mongodb.com/v3.2/reference/operator/aggregation/sum/
例如,如果查询是:
db.foo.aggregate({$group:{_id:1, avg:{$avg:"$x"}, sum:{$sum:$x}}})
然后总和值为1 + 3 = 4