Database

db={"cate":[{"_id":ObjectId("5ff98328dcb22e2f9fd23835"),"name":"home & kitchen"},{"_id":ObjectId("5ff98328dcb22e2f9fd23836"),"name":"shoes"}],"subcate":[{"_id":ObjectId("5ff9837ddcb22e2f9fd23890"),"cate":ObjectId("5ff98328dcb22e2f9fd23835"),"name":"dish"},{"_id":ObjectId("5ff9837ddcb22e2f9fd23891"),"cate":ObjectId("5ff98328dcb22e2f9fd23835"),"name":"dish 2"}],"petacate":[{"_id":ObjectId("5ff983abdcb22e2f9fd238c8"),"subcate":ObjectId("5ff9837ddcb22e2f9fd23890"),"cate":ObjectId("5ff98328dcb22e2f9fd23835"),"name":"small dish"},{"_id":ObjectId("5ff983abdcb22e2f9fd238c7"),"subcate":ObjectId("5ff9837ddcb22e2f9fd23890"),"cate":ObjectId("5ff98328dcb22e2f9fd23835"),"name":"big dish"}]}

Query

db.cate.aggregate([{"$lookup":{"from":"subcate","localField":"_id","foreignField":"cate","as":"subcate"}},{"$unwind":"$subcate"},{"$lookup":{"from":"petacate","let":{cId:"$subcate.cate",sId:"$subcate._id"},"pipeline":[{$match:{$expr:{$and:[{$eq:["$subcate","$$sId"]},{$eq:["$cate","$$cId"]},]}}}],"as":"subcate.petacate"}},{"$group":{"_id":"$_id","name":{"$first":"$name"},"subcate":{$push:"$subcate"}}}])

Result