最近因为公司需要做一些小时平均和每日平均的统计,于是去找了下mongodb的系统函数。通过avg和聚合查询实现了结果,但是发现统计的时候mongodb函数$dateToString: { format: "%Y-%m-%d %H", date: "$beginTime" }转化后也还是格林治时间,统计结果跟北京时间差了8小时。于是找了很多资料通过date: { $add: ["$beginTime", 28800000] }函数解决了这个问题,下面分享跟大家,也给自己记录一下以免后忘。
db.user.aggregate( [{ '$match': { macAddress: macAddress, beginTime: { $gt: beginTimes, $lte: endTimes } } }, { '$project': { 'SO2': 1, 'NO2': 1, 'PM10': 1, 'PM25': 1, 'speed': 1, 'direct': 1, 'temp': 1, 'humidity': 1, 'beginTime': { $dateToString: { format: "%Y-%m-%d %H", date: { $add: ["$beginTime", 28800000] } } }//8*60*60*1000 } }, { '$group': { '_id': "$beginTime", 'SO2': { '$avg': '$SO2' }, 'NO2': { '$avg': '$NO2' }, 'PM10': { '$avg': '$PM10' }, 'PM25': { '$avg': '$PM25' }, 'speed': { '$avg': '$speed' }, 'direct': { '$avg': '$direct' }, 'temp': { '$avg': '$temp' }, 'humidity': { '$avg': '$humidity' }, } }, { '$sort': { "_id": 1 } }, // { '$skip': (pageIndex - 1) * pageSize }, // { '$limit': pageSize }, { '$limit': 720 }, { '$project': { 'SO2': 1, 'NO2': 1, 'PM10': 1, 'PM25': 1, 'speed': 1, 'direct': 1, 'temp': 1, 'humidity': 1, beginTime: { $toUpper: "$_id" }, _id: 0 } }]) }