Database

[{deviceid:1,bucketSize:4,first:1573833152,last:1573833155,samples:[{val:10,time:1573833152},{val:15,time:1573833153},{val:14,time:1573833154},{val:16,time:1573833165},{val:22,time:1573833166},{val:26,time:1573833167},{val:27,time:1573833168},{val:28,time:1573833169},{val:29,time:1573833170}]},{deviceid:1,bucketSize:4,first:1573833156,last:1573833160,samples:[{val:30,time:1573833156},{val:45,time:1573833157},{val:54,time:1573833158},{val:60,time:1573833159},{val:70,time:1573833160}]},{deviceid:1,bucketSize:4,first:1573833161,last:1573833165,samples:[{val:10,time:1573833161},{val:15,time:1573833162},{val:14,time:1573833163},{val:20,time:1573833164}]}]

Query

db.collection.aggregate([{$match:{"samples.time":{$gte:1573833152,$lte:1573833159}}},{$unwind:"$samples"},{$match:{"samples.time":{$gte:1573833152,$lte:1573833159}}},{$sort:{"samples.time":1}},{$group:{_id:"$deviceid",average:{$avg:"$samples.val"}}}])

Result