Database
[{responses:[{staff:false,timestamp:1000},{staff:true,timestamp:1500}]}]
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:null}}}}}}}},{$project:{avgResponseTime:{$avg:"$responseTimes"}}}])