Database

db={col1:[{_id:"123"},{_id:"444"},{_id:"555"},{_id:"666"}],col2:[{_id:"333",parent:"123",child:"444"},{_id:"344",parent:"123",child:"555"},{_id:"345",parent:"555",child:"666"}]}

Query

db.col1.aggregate([{$sort:{_id:1}},{$limit:1},{$graphLookup:{from:"col2",startWith:"$_id",connectFromField:"child",connectToField:"parent",depthField:"level",as:"subTasks"}},{$unwind:{path:"$subTasks",preserveNullAndEmptyArrays:true}},{$sort:{"subTasks.level":-1}},{$group:{_id:"$_id",parent:{$first:"$subTasks.parent"},subTasks:{$push:{_id:"$subTasks.child",level:"$subTasks.level",parent:"$subTasks.parent"}}}},{$addFields:{subTasks:{$reduce:{input:"$subTasks",initialValue:{level:-1,presentChild:[],prevChild:[]},in:{$let:{vars:{prev:{$cond:[{$eq:["$$value.level","$$this.level"]},"$$value.prevChild","$$value.presentChild"]},current:{$cond:[{$eq:["$$value.level","$$this.level"]},"$$value.presentChild",[]]}},in:{level:"$$this.level",prevChild:"$$prev",presentChild:{$concatArrays:["$$current",[{_id:"$$this._id",parent:"$$this.parent",subTasks:{$filter:{input:"$$prev",as:"e",cond:{$eq:["$$e.parent","$$this._id"]}}}}]]}}}}}}}},{$addFields:{subTasks:"$subTasks.presentChild"}}])

Result