mongodb - 我如何在 Mongo 上每天和每小时对数据进行分组?

标签 mongodb mongodb-query aggregation-framework

我必须为显示访问的图形收集数据,例如,如果我想在图形中显示一天,我必须划分每小时的访问。 我的对象是这样的

{
    "_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/

相关文章:

javascript - 停止执行更多代码

python - 如何通过 VCS 分发 MongoDB 测试数据?

Swift & Parse - 空 PFFile

c# - 在单声道中使用 c# 驱动程序比较 mongo 集合的两个字段

mongodb - Mongodb中的聚合查询返回特定字段

node.js - 在没有 $unwind 的情况下 $lookup 多个级别?

mongodb - 蒙戈 : select only one field from the nested object

php - Mongodb 聚合 $lookup 返回空数组

Mongodb聚合: Combine multiple keys into an array

javascript - 如何按条件从输出中删除不需要的字段