Database
db={"permissions":[{"_id":1,"resource":"resource:docs/61","permissions":[{"permission":"role:documentOwner","users":["user:abc","user:def","group:abc","group:bff"]},{"permission":"document.read","users":["user:xxx"]},{"permission":"document.update","users":["user:xxx"]}]}],"groups":[{"_id":1,"id":"abc","name":"Test Group","users":["cpo","yyy"]},{"_id":2,"id":"bff","name":"Something","users":["xxx"]}]}
Query
db.permissions.aggregate([{"$match":{"resource":"resource:docs/61"}},{"$unwind":"$permissions"},{"$lookup":{"from":"groups","let":{"groups":{"$map":{"input":"$permissions.users","as":"u","in":{"$replaceAll":{"input":"$$u","find":"group:","replacement":""}}}}},"pipeline":[{$match:{$expr:{"$in":["$id","$$groups"]}}}],"as":"groupsLookup"}},{"$addFields":{"groupsLookup":{"$reduce":{"input":"$groupsLookup","initialValue":[],"in":{$setUnion:["$$value",{"$map":{"input":"$$this.users","as":"u","in":{"$concat":["user:","$$u"]}}}]}}}}},{"$project":{resource:1,permissions:{permission:1,users:{"$setUnion":[{"$filter":{"input":"$permissions.users","as":"u","cond":{$eq:[-1,{"$indexOfCP":["$$u","group:"]}]}}},"$groupsLookup"]}}}},{$group:{_id:"$_id",resource:{$first:"$resource"},permissions:{$push:"$permissions"}}}])