Database
db={"project":[{_id:234,title:"proj 1",description:"description 1",category:[{_id:1,subcategory:[{_id:11},{_id:12}]},{_id:2,subcategory:[{_id:21},{_id:23}]}]},{_id:2345,title:"proj 2",description:"description 2",category:[{_id:1,subcategory:[{_id:11},{_id:12},{_id:13}]},{_id:2,subcategory:[{_id:21},{_id:22}]},{_id:3,subcategory:[{_id:31},{_id:32}]}]}],"category":[{_id:1,title:"cate 1",subcategory:[{_id:11,},{_id:12,},{_id:13,},{_id:14,},]},{_id:2,title:"cate 2",subcategory:[{_id:21,},{_id:22,},{_id:23,},]},{_id:3,title:"cate 3",subcategory:[{_id:31,},{_id:32,},{_id:33,},]},],"subcategory":[{"_id":11,title:"subcate 11",categoryId:1},{"_id":12,title:"subcate 12",categoryId:1},{"_id":13,title:"subcate 13",categoryId:1},{"_id":14,title:"subcate 14",categoryId:1},{"_id":21,title:"subcate 21",categoryId:2},{"_id":22,title:"subcate 22",categoryId:2},{"_id":23,title:"subcate 23",categoryId:2},{"_id":31,title:"subcate 31",categoryId:3},{"_id":32,title:"subcate 32",categoryId:3},{"_id":33,title:"subcate 33",categoryId:3}]}
Query
db.project.aggregate([{$match:{_id:234}},{$unwind:"$category"},{$unwind:"$category.subcategory"},{$lookup:{from:"subcategory",localField:"category.subcategory._id",foreignField:"_id",as:"category.subcategory"}},{"$group":{"_id":"$category._id","title":{"$first":"$title"},"description":{"$first":"$description"},"category":{"$push":"$category.subcategory"}}},])