我已经阅读了文档,但仍然不太关注它。根据它,它会根据我自己的规格在集合中返回特定的文档。对于分组,它几乎说了同样的话:“按某些指定的表达式对文档进行分组,并为每个不同的分组将文档输出到下一阶段”
那么,以下这段代码实际上在做什么?对我来说似乎是多余的。
buzz
答案 0 :(得分:4)
“通过某些指定的表达式对文档进行分组,并为每个不同的分组将文档输出到下一阶段”
$group
的目的不仅是将某些字段推到下一个阶段,而且还基于在_id
属性中传递的输入条件来收集某些元素。
另一方面,手$project
函数将排除/包括某些字段(或自定义字段)以进入下一阶段。根据文档,您可以看到定义“将带有请求字段的文档传递到管道的下一个阶段。指定的字段可以是输入文档中的现有字段,也可以是新计算的字段。” < / p>
在一种情况下,如果我们从_id
中抑制$group
,那么它将为整个输入文档计算累积值。看起来就像$project
。
对于$ project阶段的查询是多余的
BillingCycle.aggregate([ {
$group: {
_id: null,
credit: {$sum: "$credit.value"}, debt: {$sum: "debt.value"}
}
}, {
$project: {_id: 0, credit: 1, debt: 1 }
}]});