$ project和$ group之间的实际区别是什么?

时间:2018-11-03 19:55:03

标签: mongodb mongodb-query

我已经阅读了文档,但仍然不太关注它。根据它,它会根据我自己的规格在集合中返回特定的文档。对于分组,它几乎说了同样的话:“按某些指定的表达式对文档进行分组,并为每个不同的分组将文档输出到下一阶段”

那么,以下这段代码实际上在做什么?对我来说似乎是多余的。

buzz

1 个答案:

答案 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   }
}]});