我必须为显示访问的图形收集数据,例如,如果我想在图形中显示一天,我必须划分每小时的访问。 我的对象是这样的
{
"_id" : ObjectId("5ab1119b646e371568c8cf9e"),
"date" : ISODate("2018-03-20T13:46:30.018Z"),
"__v" : 0
}
我试过这段代码
db.getCollection('monitors').aggregate([{
"$group": {
"_id": {
"year": {"$year": "$date"},
"dayOfYear": {"$dayOfYear": "$date"},
"interval": {"$subtract": [{"$minute": "$date"}, {"$mod": [{"$minute": "$date"}, 60]}]}
}, "count": {"$sum": 1}
}
}]))
它可以工作,但它每天只收集数据。我还需要每小时收集一次。非常感谢。
最佳答案
不确定为什么不在 $group
阶段使用 $hour
。您将需要两组,一组一天,另一组一小时。
有点像
db.monitors.aggregate([
{"$group":{
"_id":{
"year":{"$year":"$date"},
"dayOfYear":{"$dayOfYear":"$date"},
"hour":{"$hour":"$date"}
},
"count":{"$sum":1}
}},
{"$group":{
"_id":{
"year":"$_id.year",
"dayOfYear":"$_id.dayOfYear"
},
"dailyCount":{"$sum":"$count"},
"hourlyData":{"$push":{"hour":"$_id.hour","count":"$count"}}
}}
])
关于mongodb - 我如何在 Mongo 上每天和每小时对数据进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49430515/