Database

db={"users":[{"email":"admin@test.com","password":"xxxxxxxx","roles":[{"id":0,"approved":true},{"id":2,"approved":true}]},{"name":"userOne","email":"user@test.com","password":"xxxxxxxx","roles":[{"id":1,"approved":true}]}],"roles":[{"id":0,"name":"administrator"},{"id":1,"name":"employeer"},{"id":2,"name":"freelancer"}]}

Query

db.users.aggregate([{"$unwind":"$roles"},{"$lookup":{"from":"roles","localField":"roles.id","foreignField":"id","as":"roles.role"}},{"$unwind":"$roles.role"},{$addFields:{roles:{$mergeObjects:["$roles.role","$roles"]}}},{$group:{_id:"$_id",email:{$first:"$email"},password:{$first:"$password"},roles:{$push:"$roles"}}},{$project:{"roles.role":0}}])

Result