Database

db={"collection_A":[{"_id":"6360468045689c3d0c70e53c","name":"Folder1","path":"files/Folder1"},{"_id":"6360468045689c3d0c70e53f","name":"xxx","path":"files/xxx"},{"_id":"6360468d45689c3d0c70e558","name":"Folder2","path":"files/Folder2","parentFolder":"6360468045689c3d0c70e53c"},{"_id":"6360469445689c3d0c70e55c","name":"Folder3","path":"files/Folder3","parentFolder":"6360468d45689c3d0c70e558"},{"_id":"636a732946b670e689afd454","name":"images","path":"files/images","parentFolder":"6360468045689c3d0c70e53c"},{"_id":"636a735f46b670e689afd46d","name":"images","path":"files/images","parentFolder":"6360468d45689c3d0c70e558"}],"collection_B":[{"_id":"635a68aa0651c2d869fc3fd3","length":878669,"chunkSize":261120,"uploadDate":{"$date":{"$numberLong":"1666869418612"}},"filename":"pexels-lucie-liz-3165335_2022-10-27T11-16-58.jpg","contentType":"image/jpeg","metadata":{"originalname":"pexels-lucie-liz-3165335.jpg","parentFolder":"6360468045689c3d0c70e53c","path":"files/pexels-lucie-liz-3165335_2022-10-27T11-16-58.jpg"}},{"_id":"635a80060651c2d869028e68","length":5495,"chunkSize":261120,"uploadDate":{"$date":{"$numberLong":"1666875398674"}},"filename":"download_2022-10-27T12-56-38.jpg","contentType":"image/jpeg","metadata":{"originalname":"download.jpg","parentFolder":"6360469445689c3d0c70e55c","path":"files/download_2022-10-27T12-56-38.jpg"}},{"_id":"636bb8e85d480470d0a6657c","length":128069,"chunkSize":261120,"uploadDate":{"$date":{"$numberLong":"1668004072152"}},"filename":"signature_2022-11-09T14-27-52.png","contentType":"image/png","metadata":{"originalname":"signature.png","parentFolder":"6360468d45689c3d0c70e558","path":"files/signature_2022-11-09T14-27-52.png"}},{"_id":"636bb8e85d480470d0a6667c","length":128069,"chunkSize":261120,"uploadDate":{"$date":{"$numberLong":"1668004072152"}},"filename":"signature_2022-11-09T14-27-52.png","contentType":"image/png","metadata":{"originalname":"signature.png","parentFolder":null,"path":"files/signature_2022-11-09T14-27-52.png"}}]}

Query

db.collection_A.aggregate([{$match:{$or:[{parentFolder:{$exists:false}},{$expr:{$eq:["$_id","$parentFolder"]}}]}},{$graphLookup:{from:"collection_A",startWith:"$_id",connectFromField:"_id",connectToField:"parentFolder",depthField:"level",as:"children"}},{$unwind:{path:"$children",preserveNullAndEmptyArrays:true}},{$lookup:{"from":"collection_B","localField":"children._id","foreignField":"metadata.parentFolder","as":"children.files"}},{$addFields:{"children":{$cond:[{$eq:["$children._id",undefined]},"$$REMOVE","$children"]}}},{$sort:{"children.level":-1}},{$group:{_id:"$_id",parentFolder:{$first:"$parentFolder"},name:{$first:"$name"},children:{$push:"$children"},files:{$first:"$children.files"}}},{$lookup:{"from":"collection_B","localField":"_id","foreignField":"metadata.parentFolder","as":"files"}},{$addFields:{children:{$reduce:{input:"$children",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",[{$mergeObjects:["$$this",{children:{$filter:{input:"$$prev",as:"e",cond:{$eq:["$$e.parentFolder","$$this._id"]}}}}]}]]}}}}}}}},{$addFields:{children:"$children.presentChild"}}])

Result