Database

[{timestamp:ISODate("2024-01-01"),type:"start"},{timestamp:ISODate("2024-01-02"),type:"log"},{timestamp:ISODate("2024-01-03"),type:"log"},{timestamp:ISODate("2024-01-04"),type:"log"},{timestamp:ISODate("2024-01-05"),type:"start"},{timestamp:ISODate("2024-01-06"),type:"log"},{timestamp:ISODate("2024-01-07"),type:"log"},{timestamp:ISODate("2024-01-08"),type:"start"},{timestamp:ISODate("2024-01-09"),type:"log"}]

Query

db.collection.aggregate([{$setWindowFields:{sortBy:{timestamp:1},output:{index:{$documentNumber:{}}}}},{$group:{_id:null,events:{$push:"$$ROOT"}}},{$set:{starts:{$filter:{input:"$events",cond:{$eq:["$$this.type","start"]}}}}},{$set:{grouped_events:{$map:{input:{$range:[0,{$size:"$starts"}]},as:"i",in:{$slice:["$events",{$subtract:[{$arrayElemAt:["$starts.index","$$i"]},1]},{$subtract:[{$arrayElemAt:[{$concatArrays:["$starts.index",[{$add:[{$size:"$events"},1]}]]},{$add:["$$i",1]}]},{$arrayElemAt:["$starts.index","$$i"]}]}]}}}}}])

Result