mongodb - 根据日期范围按日/月/周分组

标签 mongodb date group-by aggregation-framework mongodb-aggregation

这是引用这个question .

这是我的数据集:

[
  {
    "rating": 4,
    "ceatedAt": ISODate("2016-08-08T15:32:41.262+0000")
  },
  {
    "rating": 3,
    "createdAt": ISODate("2016-08-08T15:32:41.262+0000")
  },
  {
    "rating": 3,
    "ceatedAt": ISODate("2016-07-01T15:32:41.262+0000")
  },
  {
    "rating": 5,
    "createdAt": ISODate("2016-07-01T15:32:41.262+0000")
  }
]

我希望能够在日期范围内按周或按月进行过滤。

我该如何在 mongo 中做到这一点?

这是按天分组的答案。

db.collection.aggregate([
    { 
        "$project": {
            "formattedDate": { 
                "$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" } 
            },
            "createdAtMonth": { "$month": "$ceatedAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$formattedDate",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" },
         }
    }
])

最佳答案

对于每周分组,运行以下管道,主要使用 Date Aggregation Operators提取日期部分:

db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtWeek",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" }
         }
    }
])

对于每月汇总,请互换 $group 键使用创建的月份字段:

db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtMonth",
             "average": { "$avg": "$rating" },
             "week": { "$first": "$createdAtWeek" }
         }
    }
])

关于mongodb - 根据日期范围按日/月/周分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269760/

相关文章:

javascript - MongoDB - 在一系列小时而不是日期之间查询

android - 如何从 Sqlite ( android ) 中的日期时间字段获取日期

javascript - Date.parse() 与 moment().unix()

mySQL:每种类型仅显示 4 条记录,按类型分组

mysql - MySQL中具有不同条件的多个聚合函数

javascript - 如何在 Mongoose 中构建条件查询?

node.js - Express:将文档嵌入现有文档中

ajax - 从JSON向highcharts添加系列

python - groupby 多个值,并绘制结果

javascript - meteor 集合不更新客户端上的订阅