Database
db={"things":[{name:"My thing",files:[{name:"My file 1",versions:[{file_id:1},{file_id:1},],},{name:"My file 2",versions:[{file_id:1},{file_id:1},],}]}],"files":[{_id:1,type:"image",size:1234,}]}
Query
db.things.aggregate([{$unwind:"$files"},{$unwind:"$files.versions"},{$lookup:{from:"files",localField:"files.versions.file_id",foreignField:"_id",as:"files.versions.file_id"}},{$unwind:"$files.versions.file_id"},{$group:{_id:{name:"$name",file_name:"$files.name"},versions:{$push:"$files.versions"}}},{$group:{_id:"$_id.name",files:{$push:{name:"$_id.file_name",versions:"$versions"}}}}])