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

Bru*_*tti 0 mongodb mongodb-query

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

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

BillingCycle.aggregate([{
    $project: {credit: {$sum: "$credits.value"}, debt: {$sum: "debts.value"}}

}, {
    $group: {
        _id: null,
        credit: {$sum: "$credit"}, debt: {$sum: "debt"}
    }
}, {
    $project: {_id: 0, credit: 1, debt: 1   }
}]});
Run Code Online (Sandbox Code Playgroud)

Nis*_*waz 5

“按某些指定的表达式对文档进行分组,并为每个不同的分组将文档输出到下一阶段”

的目的$group不仅是将某些字段推送到下一个阶段,而且还基于在_id属性中传递的输入条件收集一些元素。

另一方面,手动$project功能将排除/包括某些字段(或自定义字段)到下一个阶段。对于每个文档,您可以看到定义“将带有请求字段的文档传递到管道的下一阶段。指定的字段可以是输入文档中的现有字段,也可以是新计算的字段。”

在一种情况下,如果我们抑制_idfrom,$group那么它将为整个输入文档计算累积值。看起来好像是这样$project

对于$ project阶段的查询是多余的

BillingCycle.aggregate([ {
    $group: {
        _id: null,
        credit: {$sum: "$credit.value"}, debt: {$sum: "debt.value"}
    }
}, {
    $project: {_id: 0, credit: 1, debt: 1   }
}]});
Run Code Online (Sandbox Code Playgroud)