Database

[{id:"ID",points:10,sources:[{sourceId:"s1",sourcePoints:6},{sourceId:"s2",sourcePoints:4}]},{id:"ID",points:2,sources:[{sourceId:"s1",sourcePoints:2}]}]

Query

db.collection.aggregate([{$match:{id:"ID"}},{"$unwind":"$sources"},{$group:{_id:{mainId:"$id","sourceId":"$sources.sourceId"},sumPerSoureId:{$sum:"$sources.sourcePoints"}}},{$group:{_id:"$_id.mainId",totalPoints:{$sum:"$sumPerSoureId"},keyVal:{$push:{"k":"$_id.sourceId","v":{"sourcePoints":"$sumPerSoureId"}}}}},{$project:{_id:0,id:"$_id",points:"$totalPoints",sources:{"$arrayToObject":"$keyVal"}}}])

Result