Database

db={entity:[{_id:1,name:"john doe",type:"customer"}],accounts:[{_id:1,name:"account 1",phone:"0123456789"}],prs:[{customer:1,account:1,total_usd:100,total_iqd:200,status:"approved",created_at:new Date("2023-10-19")},{customer:1,account:1,total_usd:200,total_iqd:150,status:"approved",created_at:new Date("2023-10-19")}],invoices:[{customer:1,account:1,total_usd:400,total_iqd:300,status:"approved",created_at:new Date("2023-10-19")},{customer:1,account:1,total_usd:250,total_iqd:300,status:"approved",created_at:new Date("2023-10-19")},{customer:1,account:1,total_usd:150,total_iqd:280,status:"approved",created_at:new Date("2023-10-19")}]}

Query

db.entity.aggregate([{$match:{_id:1}},{$lookup:{from:"invoices",localField:"_id",foreignField:"customer",as:"invoices",pipeline:[{$lookup:{from:"accounts",localField:"account",foreignField:"_id",pipeline:[{$project:{_id:1,name:1}}],as:"account"}},{$unwind:"$account"},{"$addFields":{"kind":"invoice"}}]}},{$lookup:{from:"prs",localField:"_id",foreignField:"customer",as:"prs",pipeline:[{$lookup:{from:"accounts",localField:"account",foreignField:"_id",pipeline:[{$project:{_id:1,name:1}}],as:"account"}},{$unwind:"$account"},{"$addFields":{"kind":"pr"}}]}},{$project:{_id:1,name:1,type:1,docs:{$zip:{inputs:["$prs","$invoices"],useLongestLength:true}}}},{$unwind:"$docs"},{$unwind:"$docs"},{$match:{docs:{$ne:null}}},{$group:{_id:{status:"$docs.status",account:"$docs.account._id",kind:"$docs.kind",year:{$year:"$docs.created_at"}},sum_usd:{$sum:"$docs.total_usd"},sum_iqd:{$sum:"$docs.total_iqd"}}}])

Result