Не работи правилно, защото агрегира всички документи в колекцията; вие групирате по константа "_id":"tempId"
, просто трябва да посочите правилния ключ, като добавите $
като:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
което по същество е едноетапна конвейерна версия на агрегатна операция с допълнително поле, което съдържа сумарния израз преди груповия конвейер, след което извиква това поле като $sum
оператор в групата.
Горното работи от $sum
от MongoDB 3.2+ се предлага както в $project
и $group
етапи и когато се използва в $проект
етап, $sum
връща сумата от списъка с изрази. Изразът "$messages.data.value"
връща списък с числа [120, 1200]
които след това се използват като $sumкод>
израз:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])