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":{"users":{"$filter":{"input":"$permissions.users","as":"user","cond":{"$ne":[-1,{"$indexOfCP":["$$user","group:"]}]}}}},"pipeline":[{"$match":{"$expr":{"$in":[{"$concat":["group:","$id"]},"$$users"]}}},{"$project":{"_id":0,"id":{"$concat":["group:","$id"]},"users":1}}],"as":"groups"}},{"$project":{"groups":1,"permissions":{"permission":"$permissions.permission","users":"permissions.users"}}}])

Result