Database

[{_id:"a1",sales:[{amont:13,servicer_id:"A"},{amont:10,servicer_id:"B"}],service:[{amont:25,servicer_id:"A"},{amont:25,servicer_id:"A"},{amont:20,servicer_id:"B"}]},{_id:"a2",sales:[{amont:10,servicer_id:"A"},{amont:20,servicer_id:"B"}],service:[{amont:15,servicer_id:"A"},{amont:10,servicer_id:"B"}]},{_id:"a3",sales:[{amont:10,servicer_id:"A"},{amont:20,servicer_id:"B"}],service:[{amont:15,servicer_id:"A"},{amont:10,servicer_id:"B"}]}]

Query

db.collection.aggregate([{$unwind:{path:"$service",preserveNullAndEmptyArrays:true}},{$group:{_id:{serviceId:"$service.servicer_id",docId:"$_id"},services:{$sum:1},sales:{$first:"$sales"},totalService:{$sum:"$service.amont"},}},{"$addFields":{serviceSales:{$filter:{input:"$sales",as:"sale",cond:{$eq:["$$sale.servicer_id","$_id.serviceId"]}}}}},{$group:{_id:"$_id.serviceId",services:{$sum:"$services"},sales:{$sum:{$size:"$serviceSales"}},totalService:{$sum:"$totalService"},totalSale:{$sum:{$reduce:{input:"$serviceSales",initialValue:0,in:{$sum:["$$value","$$this.amont"]}}}}}}])

Result