Database

db={"users":[{"_id":"1","groups":["2"]},{"_id":"2","groups":["1"]}],"group":[{"_id":"1","permissions":["12","3"]},{"_id":"2","permissions":["3","2"]}],"permission":[{"_id":"12","valid":true},{"_id":"3","valid":true},{"_id":"2","valid":true}]}

Query

db.users.aggregate([{$lookup:{from:"group",localField:"groups",foreignField:"_id",as:"group",}},{$unwind:{"path":"$group"}},{$lookup:{from:"permission",localField:"group.permissions",foreignField:"_id",as:"permissions",}},{"$match":{"permissions.valid":true}},{$group:{_id:"$_id",groups:{$first:"$groups"}}},{$unset:["group","permissions"]},])

Result