Database
[{"collection":"collection","count":10,"content":{"_id":{"type":"autoincrement","autoType":"int"},"array":{"type":"array","minLength":0,"maxLength":5,"nullPercentage":30,"arrayContent":{"type":"object","nullPercentage":30,"objectContent":{"val1":{"type":"int","min":0,"max":10,"nullPercentage":30},"val2":{"type":"int","min":100,"max":110,"nullPercentage":30},"val3":{"type":"int","min":1000,"max":1010,"nullPercentage":30}}}}}}]
Query
db.collection.aggregate([{/** just add index if type is array*/"$match":{"array":{"$type":"array"}}},{/** map each element with incremental index*/"$set":{"array":{"$map":{"input":{/** produce index values*/"$range":[0,{"$size":"$array"}]},"as":"idx","in":{/** merge index into each object*/"$mergeObjects":[{"index":"$$idx"},{"$arrayElemAt":["$array","$$idx"]}]}}}}}])