Database
[{"collection":"users","count":10,"content":{"_id":{"type":"reference","id":1,"refContent":{"type":"objectId"}},"firstName":{"type":"faker","method":"FirstName"},"lastName":{"type":"faker","method":"LastName"},"email":{"type":"faker","method":"Email"}}},{"collection":"products","count":100,"content":{"_id":{"type":"reference","id":2,"refContent":{"type":"objectId"}},"title":{"type":"faker","method":"BeerName"},"price":{"type":"int","min":100,"max":500}}},{"collection":"Order","count":3,"content":{"user":{"type":"ref","id":1},"orderItems":{"type":"array","minLength":1,"maxLength":5,"arrayContent":{"type":"object","objectContent":{"product":{"type":"ref","id":2},"quantity":{"type":"int","min":1,"max":5}}}}}}]
Query
db.Order.aggregate([{"$unwind":"$orderItems"},{"$lookup":{"from":"products","localField":"orderItems.product","foreignField":"_id","as":"products"}},{"$set":{"products":{"$first":"$products"}}},{"$project":{"user":1,"products":{"productsId":"$products","quantity":"$orderItems.quantity","_id":"$products._id"}}},{"$group":{"_id":"$_id","user":{"$first":"$user"},"products":{"$push":"$products"}}},{"$lookup":{"from":"users","localField":"user","foreignField":"_id","as":"user"}}])