Database

db={"users":[{_id:ObjectId("63907d27ba21557a3455a24b"),first_name:"Tep",last_name:"Tes",display_name:"Tep Tes",created:ISODate("2022-12-07T11:46:47.230Z"),last_seen:1670618355349,username:"example@example.com",email:"example@example.com",enable_local_login:"true",connected_logins:[],context:ObjectId("639074e7ba21557a3455a23f"),roles:[ObjectId("63907c7fba21557a3455a247"),ObjectId("63907c7fba21557a3455a248")],favourite_sm:[ObjectId("6390832cba21557a3455a250")]}],"organizations":[{_id:ObjectId("639074e7ba21557a3455a23f"),organization_name:"vip",display_name:"Vip",enabled_login_methods:["ldap"],enabled_service_modules:[ObjectId("6390832cba21557a3455a250"),ObjectId("6390832cba21557a3455a24c"),ObjectId("6390832cba21557a3455a24e"),ObjectId("6390832cba21557a3455a251")],login_method_configurations:[],created:ISODate("2022-12-07T11:11:35.568Z")}],"roles":[{_id:ObjectId("63907c7fba21557a3455a247"),role:"jt",description:"Has access to membership data"},{_id:ObjectId("63907c7fba21557a3455a248"),role:"at",description:"Has access to tenant information"}],"service_modules":[{_id:ObjectId("6390832cba21557a3455a250"),service_name:"Jt",permissions:[ObjectId("63907c7fba21557a3455a245"),ObjectId("63907c7fba21557a3455a246"),ObjectId("63907c7fba21557a3455a247")],route:"jt"},{_id:ObjectId("6390832cba21557a3455a24c"),service_name:"Mc",permissions:[ObjectId("63907c7fba21557a3455a245"),ObjectId("63907c7fba21557a3455a246")],route:"mc"},{_id:ObjectId("6390832cba21557a3455a24e"),service_name:"Ms",permissions:[ObjectId("63907c7fba21557a3455a245"),ObjectId("63907c7fba21557a3455a246")],route:"ms"},{_id:ObjectId("6390832cba21557a3455a251"),service_name:"At",permissions:[ObjectId("63907c7fba21557a3455a245"),ObjectId("63907c7fba21557a3455a246"),ObjectId("63907c7fba21557a3455a248")],route:"at"}]}

Query

db.users.aggregate([{$lookup:{from:"organizations",localField:"context",foreignField:"_id",as:"context"}},{$lookup:{from:"roles",localField:"roles",foreignField:"_id",as:"roles_with_details"}},{$lookup:{from:"service_modules",localField:"context.enabled_service_modules",foreignField:"_id",as:"service_modules","let":{"roles":"$roles"},"pipeline":[{"$match":{"$expr":{"$gt":[{"$size":{"$setIntersection":["$$roles","$permissions"]}},0]}}}]}},{$project:{"context.enabled_service_modules":0,"password":0}}])

Result