Database

db={"user":[{_id:ObjectId("0000000000000000000000a1"),username:"user1",name:"name1"},{_id:ObjectId("0000000000000000000000a2"),username:"user2",name:"name2"},{_id:ObjectId("0000000000000000000000a3"),username:"user2",name:"name2"}],"reply":[{_id:ObjectId("00000000000000000000000a"),author:ObjectId("0000000000000000000000a3"),title:"Reply1",body:"Hello World!"},{_id:ObjectId("00000000000000000000000b"),author:ObjectId("0000000000000000000000a1"),title:"Reply2",body:"Hello World!"},{_id:ObjectId("00000000000000000000000c"),author:ObjectId("0000000000000000000000a2"),title:"Reply3",body:"Hello World!"},{_id:ObjectId("00000000000000000000000d"),author:ObjectId("0000000000000000000000a2"),title:"Reply4",body:"Hello World!"}],"post":[/**First post*/{_id:ObjectId("000000000000000000000000"),title:"post title",author:ObjectId("0000000000000000000000a1"),reply:[ObjectId("00000000000000000000000a"),ObjectId("00000000000000000000000b")],},/**Second Post*/{_id:ObjectId("000000000000000000000001"),title:"post title2",author:ObjectId("0000000000000000000000a2"),reply:[ObjectId("00000000000000000000000c"),ObjectId("00000000000000000000000d")],}]}

Query

db.post.aggregate([{"$lookup":{"from":"user","localField":"author","foreignField":"_id","as":"author"}},{"$set":{"author":{"$first":"$author"}}},{"$lookup":{"from":"reply","localField":"reply","foreignField":"_id","as":"reply"}},{"$lookup":{"from":"user","localField":"reply.author","foreignField":"_id","as":"replyAuthors"}},{"$project":{"title":1,"author":1,"reply":{"$map":{"input":"$reply","as":"repObj","in":{"$mergeObjects":["$$repObj",{"author":{"$first":{"$filter":{"input":"$replyAuthors","as":"repA","cond":{"$eq":["$$repA._id","$$repObj.author"]}}}}}]}}}}}])

Result