Database
db={"resourcepolicies":[{resource:"resource1",permissions:["permission:read","role:admin","role:readonly"]}],"rolepermissions":[{name:"role:admin",permissions:["permission:write","permission:delete"]},{name:"role:readonly",permissions:["permission:read","permission:test"]}]}
Query
db.resourcepolicies.aggregate([{$match:{$expr:{$eq:["$resource","resource1"]}}},{"$graphLookup":{"from":"rolepermissions","startWith":"$permissions","connectFromField":"permissions","connectToField":"name","as":"rpLookup"}},{"$project":{_id:0,resource:1,permissions:{"$reduce":{"input":"$rpLookup","initialValue":"$permissions","in":{"$setUnion":["$$value","$$this.permissions"]}}}}},{"$addFields":{"permissions":{"$filter":{"input":"$permissions","as":"p","cond":{/** remove permissions entry which contains "role:"*/$eq:[-1,{"$indexOfCP":["$$p","role:"]}]}}}}}])