Database

[{"data":[{"_id":"group1","start":["a","b","c"],"end":["l","m","n","o"],"mid":["a1","a2","a3","a4"]},{"_id":"group2","start":["p","q","r","s"],"end":["h","i","j"],"mid":["b1","b2","b3"]}]}]/** {*//** "new_data": [*//** {*//** "_id": "group1",*//** "val": [*//** {*//** "start": "a",*//** "end": "l"*//** },*//** {*//** "start": "b",*//** "end": "m"*//** },*//** {*//** "start": "c",*//** "end": "n"*//** },*//** {*//** "start": "a4",*//** "end": "o"*//** }*//** ]*//** },*//** {*//** "_id": "group2",*//** "val": [*//** {*//** "start": "p",*//** "end": "h"*//** },*//** {*//** "start": "q",*//** "end": "i"*//** },*//** {*//** "start": "r",*//** "end": "j"*//** },*//** {*//** "start": "s",*//** "end": "default value"*//** }*//** ]*//** }*//** ]*//** }*/]

Query

db.collection.aggregate([{$unwind:{path:"$data"}},{$project:{doc_id:"$_id",_id:"$data._id",val:{$map:{input:{$range:[0,{$max:[{$size:"$data.start"},{$size:"$data.end"},{$size:"$data.mid"}]}]},in:{start:{$ifNull:[{$arrayElemAt:["$data.start","$$this"]},{$arrayElemAt:["$data.mid","$$this"]}]},end:{$ifNull:[{$arrayElemAt:["$data.end","$$this"]},"default_value"]}}}}}},{$group:{_id:"$doc_id",new_data:{$push:"$$ROOT"}}},{$project:{"new_data.doc_id":false}}])

Result