什么$ sum:1意味着在Mongo

Ale*_*lke 5 mongodb

我有一个集合foo:

{ "_id" : ObjectId("5837199bcabfd020514c0bae"), "x" : 1 }
{ "_id" : ObjectId("583719a1cabfd020514c0baf"), "x" : 3 }
{ "_id" : ObjectId("583719a6cabfd020514c0bb0") }
Run Code Online (Sandbox Code Playgroud)

我用这个查询:

db.foo.aggregate({$group:{_id:1, avg:{$avg:"$x"}, sum:{$sum:1}}})
Run Code Online (Sandbox Code Playgroud)

然后我得到一个结果:

{ "_id" : 1, "avg" : 2, "sum" : 3 }
Run Code Online (Sandbox Code Playgroud)

{$sum:1}这个查询意味着什么?

jno*_*ovo 10

来自官方文档:

在$ group阶段中使用时,$ sum具有以下语法,并返回将指定表达式应用于按键共享同一组的一组文档中的每个文档所产生的所有数值的总和:

{$ sum:<expression>}

因为在您的示例中表达式是1,它将为组中的每个文档聚合值1,从而产生每个组的文档总数.

  • 文档的表达式“1”将返回 1,因为该表达式将应用于组中的每个文档,因此“{$sum: 1}”将返回组中文档的数量。 (2认同)

小智 5

基本上它会将每行的表达式值相加。在这种情况下,由于行数是 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