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"},{"$lookup":{"from":"subcategory","localField":"category.subcategory._id","foreignField":"_id","as":"category.subcategory"}},{"$lookup":{"from":"category","localField":"category._id","foreignField":"_id","as":"joinFortitle"}},{"$addFields":{"category.title":{"$arrayElemAt":["$joinFortitle",0]}}},{"$addFields":{"category.title":"$category.title.title"}},{"$group":{"_id":"$_id","title":{"$first":"$title"},"description":{"$first":"$description"},"category":{$push:"$category"}}}])

Result