Database
db={users:[{_id:"aaa",name:"John",user_type:"writer",department:{value:"1",label:"press"}},{_id:"bbb",name:"Charles",user_type:"writer",department:{value:"1",label:"press"}},{_id:"ccc",name:"Jessy",user_type:"admin_writer",department:{value:"1",label:"press"}},{_id:"ddd",name:"Tim",user_type:"writer",department:{value:"2",label:"news"}},{_id:"eee",name:"Max",user_type:"admin_writer",department:{value:"2",label:"news"}},{_id:"fff",name:"Julia",user_type:"admin",department:{value:"2",label:"news"}},{_id:"ggg",name:"Arnold",user_type:"writer",department:{value:"3",label:"infos"}}],departments:[{_id:1,name:"press",group:"times"},{_id:2,name:"news",group:"times"},{_id:3,name:"infos",group:"herald"}],docs:[{_id:1,name:"monday",user_id:"aaa"},{_id:2,name:"tuesday",user_id:"bbb"},{_id:3,name:"wednesday",user_id:"ddd"},{_id:4,name:"thursday",user_id:"ddd"},{_id:5,name:"friday",user_id:"ggg"}]}
Query
db.users.aggregate([{"$lookup":{"from":"docs","localField":"_id","foreignField":"user_id","as":"selfDocs"}},{"$lookup":{"from":"users","localField":"department.value","foreignField":"department.value","as":"deptUsers"}},{"$lookup":{"from":"docs","let":{userType:"$user_type",deptUsers:"$deptUsers"},pipeline:[{$match:{$expr:{$and:[{$eq:["$$userType","admin_writer"]},{$in:["$user_id","$$deptUsers._id"]}]}}}],"as":"deptDocs"}},{"$lookup":{"from":"departments",let:{dept:"$department.value"},pipeline:[{$match:{$expr:{$eq:["$$dept",{$toString:"$_id"}]}}}],"as":"group"}},{"$unwind":"$group"},{"$set":{"group":"$group.group"}},{"$lookup":{"from":"users","let":{group:"$group"},"pipeline":[{"$lookup":{"from":"departments",let:{d:"$department.value"},pipeline:[{$match:{$expr:{$eq:["$$d",{$toString:"$_id"}]}}}],"as":"gp"}},{"$unwind":"$gp"},{$match:{$expr:{$eq:["$gp.group","$$group"]}}},{"$project":{"_id":1}}],"as":"groupUsers"}},{"$lookup":{"from":"docs","let":{userType:"$user_type",groupUsers:"$groupUsers"},pipeline:[{$match:{$expr:{$and:[{$eq:["$$userType","admin"]},{$in:["$user_id","$$groupUsers._id"]}]}}}],"as":"adminDocs"}},{$project:{name:1,user_type:1,allDocs:{"$setUnion":["$selfDocs","$deptDocs","$adminDocs"]}}},{$project:{name:1,user_type:1,"allDocs.name":1}}])