Database

[{"start":ISODate("2020-03-11T10:00:00Z"),"end":ISODate("2020-03-11T19:00:00Z")}]

Query

db.collection.aggregate([{$set:{interval:{$let:{vars:{size:{$divide:[{$subtract:["$end","$start"]},{$multiply:[1000,60]}]}},in:{$map:{input:{$range:[0,{$add:["$$size",1]},30]},in:{id:{$add:[{$divide:["$$this",30]},1]},time:{$add:["$start",{$multiply:[1000,60,"$$this"]}]}}}}}}}},{$unwind:"$interval"},{$replaceRoot:{newRoot:"$interval"}}])

Result