Database

[{responses:[{staff:true,timestamp:1000},{staff:true,timestamp:1100},{staff:true,timestamp:1200},{staff:false,timestamp:1300}]}]

Query

db.collection.aggregate([{$set:{responseTimes:{$reduce:{input:"$responses",initialValue:[],in:{$cond:{if:{$not:"$$this.staff"},then:{$concatArrays:["$$value",["$$this.timestamp"]]},else:{$cond:{if:{$gt:[{$size:"$$value"},0]},then:{$concatArrays:[{$slice:["$$value",{$subtract:[{$size:"$$value"},1]}]},[{$subtract:["$$this.timestamp",{$last:"$$value"}]}]]},else:[]}}}}}}}},])

Result