我在 MongoDB 中有一些数据,其中包含 10 分钟的周期至今总和:
db.test.insert({perEnd: ISODate('2013-06-05T18:00:00'), val: 7.3})
db.test.insert({perEnd: ISODate('2013-06-05T18:10:00'), val: 6.23})
db.test.insert({perEnd: ISODate('2013-06-05T18:20:00'), val: 4.1})
db.test.insert({perEnd: ISODate('2013-06-05T18:30:00'), val: 0.21})
db.test.insert({perEnd: ISODate('2013-06-05T18:40:00'), val: 12.1})
db.test.insert({perEnd: ISODate('2013-06-05T18:50:00'), val: 6.0})
db.test.insert({perEnd: ISODate('2013-06-05T19:00:00'), val: 8.9})
db.test.insert({perEnd: ISODate('2013-06-05T19:10:00'), val: .98})
db.test.insert({perEnd: ISODate('2013-06-05T19:20:00'), val: 14.7})
我想汇总以查找每个小时结束期间的总和,因此我应该得到以下值:
ending 2013-06-05 18:00:00 - 7.3
ending 2013-06-05 19:00:00 - 37.54
ending 2013-06-05 20:00:00 - 15.68
使用内置日期运算符不起作用,因为它们将所有日期四舍五入(截断)到最近的边界,我需要四舍五入:
> db.test.aggregate({$group: {_id: {Year: {$year: "$perEnd"},
Day: {$dayOfYear: "$perEnd"},
Hour: {$hour: "$perEnd"}},
sum: {$sum: "$val"}}})
{
"result" : [
{ "_id" : { "Year" : 2013,
"Day" : 156,
"Hour" : 19 },
"sum" : 24.58 },
{ "_id" : { "Year" : 2013,
"Day" : 156,
"Hour" : 18 },
"sum" : 35.940000000000005 }
],
"ok" : 1
}
任何人都看到了以体面的表现实现这一目标的方法吗?