«Группирует документы по определенному выражению и выводит на следующую стадию документ для каждой отдельной группировки»
Цель $group
состоит не только в том, чтобы перенести некоторые поля на следующий этап, но и в сбор некоторого элемента на основе критериев ввода, переданных в атрибуте _id
.
С другой стороны, функция $project
hand будет исключать / включать какое-либо поле (или пользовательское поле) для следующего этапа. В соответствии с документом вы можете увидеть определение «Передача документов с запрошенными полями к следующему этапу в конвейере. Указанные поля могут быть существующими полями из входных документов или вновь вычисленных полей.»
Существует один случай, если мы подавим _id
из $group
, тогда он рассчитает накопленные значения для всех входных документов в целом. Который, кажется, действует как $project
.
Для запроса на этапе $ project избыточно
BillingCycle.aggregate([ {
$group: {
_id: null,
credit: {$sum: "$credit.value"}, debt: {$sum: "debt.value"}
}
}, {
$project: {_id: 0, credit: 1, debt: 1 }
}]});