Я новичок в агрегациях mongodb. Учитывая следующую коллекцию:
[
{
"ft": 1,
"pippo": 10,
"pluto": 5,
"detail": [
{
"ft": 1,
"pippo": 1,
"pluto": 2
},
{
"ft": 2,
"pippo": 1,
"pluto": 2
},
{
"ft": 1,
"pippo": 1,
"pluto": 2
},
{
"ft": 3,
"pippo": 1,
"pluto": 2
}
]
},
{
"ft": 2,
"pippo": 4,
"pluto": 3
}, {
"ft": 1,
"pippo": 1,
"pluto": 1
}
]
, я хотел бы вычислить сумму всех элементов, имеющих "ft": 1. Я пробовал эту агрегацию после раскрутки элементов, содержащихся в массиве:
[
{
'$unwind': '$detail'
}, {
'$group': {
'_id': '$ft',
'count': {
'$sum': 1
},
'ft': {
'$first': '$ft'
},
'pippo': {
'$sum': '$pippo'
},
'pluto': {
'$sum': '$pluto'
}
}
}
]
И получил следующий неверный результат:
_id: 1,
count: 4,
pippo: 40,
pluto: 20
Правильный результат должен быть:
_id: 1,
count: 4, // all items having ft === 1
pippo: 13, // the sum of all pippo in all items where ft === 1
pluto: 10 // the sum of all pluto items where ft === 1