db.measurements.aggregate([ { "$match" : { "timestamp": { "$gte": ISODate('2014-03-12 00:00:00'), "$lt": ISODate('2014-03-12 23:59:59') } } }, { "$project": { "wh": 1, "hourly": { "$hour": "$timestamp" } }}, { "$sort": { "hourly": 1 } }, { "$group": { "_id": "$hourly", "firstReading": { "$first": "$wh" }, "lastReading": { "$last": "$wh" } }}, { "$project": { "hourReading": { "$subtract": [ "$lastReading" - "$firstReading" ] } } ])