Database

[{"sensor":"A","volume":12.4,"temperatue":20,"timestamp":ISODate("2019-08-29T15:58:06.093Z")},{"sensor":"A","volume":12.3,"temperatue":21,"timestamp":ISODate("2019-08-29T16:48:06.078Z")},{"sensor":"B","volume":32.4,"temperatue":20,"timestamp":ISODate("2019-08-29T15:55:06.093Z")},{"sensor":"B","volume":21.2,"temperatue":21,"timestamp":ISODate("2019-08-29T16:49:06.178Z")},{"sensor":"B","volume":22.3,"temperatue":22,"timestamp":ISODate("2019-08-29T17:04:06.078Z")}]

Query

db.collection.aggregate([{$sort:{timestamp:-1}},{$group:{_id:"$sensor",data:{$push:"$$ROOT"}}},{$set:{data:{$reduce:{input:"$data",initialValue:[],in:{$concatArrays:["$$value",[{$mergeObjects:["$$this",{timestamp_end:{$ifNull:[{$last:"$$value.timestamp"},"$$NOW"]}}]}]]}}}}},{$unwind:"$data"},{$sort:{"data.timestamp":1}},{$group:{_id:null,data:{$push:"$data"},timestamp:{$addToSet:"$data.timestamp"}}},{$set:{sum_data:{$map:{input:"$timestamp",as:"t",in:{$filter:{input:"$data",cond:{$and:[{$lte:["$$this.timestamp","$$t"]},{$gt:["$$this.timestamp_end","$$t"]}]}}}}}}},{$set:{volume:{$map:{input:"$sum_data",in:{$sum:"$$this.volume"}}},result:{$range:[0,{$size:"$timestamp"}]}}},{$project:{result:{$map:{input:"$result",as:"i",in:{volume:{$arrayElemAt:["$volume","$$i"]},timestamp:{$arrayElemAt:["$timestamp","$$i"]}}}}}}])

Result