Database
db={"users":[{"_id":1,"username":"user1",},{"_id":2,"username":"user2",}],"roles":[{"_id":10,"name":"role1"},{"_id":11,"name":"role2"},],"userRoles":[{"_id":100,"userId":1,"roleId":10},{"_id":101,"userId":1,"roleId":11},{"_id":102,"userId":2,"roleId":10}]}
Query
db.users.aggregate([{"$match":{"_id":1}},{"$lookup":{"from":"userRoles","localField":"_id","foreignField":"userId","as":"roles"}},{"$lookup":{"from":"roles","localField":"roles.roleId","foreignField":"_id","as":"roles"}}])