需要进行数据聚合,以便同时汇总根级别和子表中的数据。
拥有如下输入数据:
[
{
id: ID,
points: 10,
sources: [{
sourceId: 's1',
sourcePoints: 6,
},
{
sourceId: 's2',
sourcePoints: 4,
}]
},
{
id: ID,
points: 2,
sources: [{
sourceId: 's1',
sourcePoints: 2,
}]
}
];
我想要得到这样的汇总。
{
id: ID,
points: 12 // sum
sources: {
s1: { sourcePoints: 8 } // sum of all s1 from all records for sourceId = s1 and id = ID
s2: { sourcePoints: 4 } // same as above, for sourceId = s2 and id = ID
... // sources can be N
}
}
对于我来说,从根目录获取汇总很简单。
[
{ $match: { id: ID } },
{ $group: { _id: $id, sum: { $sum: '$points' }} }
]
但是我不知道如何从数组中添加求和。