Database

db={"documents":[{"_id":ObjectId("5a934e000102030405000000"),"name":"root","level":0},{"_id":ObjectId("5a934e000102030405000001"),"name":"child_A","parentId":ObjectId("5a934e000102030405000007"),"level":1},{"_id":ObjectId("5a934e000102030405000002"),"name":"child_B","parentId":ObjectId("5a934e000102030405000000"),"level":1},{"_id":ObjectId("5a934e000102030405000003"),"name":"child_A_1","parentId":ObjectId("5a934e000102030405000001"),"level":2},{"_id":ObjectId("5a934e000102030405000004"),"name":"child_B_1","parentId":ObjectId("5a934e000102030405000002"),"level":2},{"_id":ObjectId("5a934e000102030405000005"),"name":"child_B_2","parentId":ObjectId("5a934e000102030405000002"),"level":2},{"_id":ObjectId("5a934e000102030405000006"),"name":"child_B_2_1","parentId":ObjectId("5a934e000102030405000005"),"level":3},{"_id":ObjectId("5a934e000102030405000007"),"name":"root2","level":0}]}

Query

db.documents.aggregate([{$facet:{root:[{$match:{"level":0}}],children:[{$match:{level:1}},{$graphLookup:{from:"documents",startWith:"$_id",connectFromField:"_id",connectToField:"parentId",maxDepth:0,as:"hierarchy"}},{$sort:{_id:1}}],grandchild:[{$match:{level:2}},{$graphLookup:{from:"documents",startWith:"$_id",connectFromField:"_id",connectToField:"parentId",maxDepth:0,as:"hierarchy"}},{$sort:{_id:1}}]}},{$unwind:"$children"},{$project:{"root":1,"children.name":1,"children._id":1,"children.level":1,"children.parentId":1,"children.hierarchy":{$filter:{input:"$grandchild",as:"sub_level",cond:{$eq:["$$sub_level.parentId","$children._id"]}}}}},{$group:{_id:"$root",children:{$push:"$children"}}},{$project:{root:"$_id",children:1,}},{$unwind:"$root"},{$project:{"root._id":1,"root.name":1,"root.level":1,"root.hierarchy":{$filter:{input:"$children",as:"sub_level",cond:{$eq:["$$sub_level.parentId","$root._id"]}}}}},{$replaceRoot:{newRoot:"$root"}}])

Result