MongoDB多个日期范围分组

时间:2017-01-17 01:55:53

标签: mongodb aggregation-framework

我将数据存储在小时桶中。简化结构:

{
    value: 20,
    date: ISODate("2017-01-01T00:00:00Z")
},
{
    value: 50,
    date: ISODate("2017-01-01T01:00:00Z")
},
{
    value: 90,
    date: ISODate("2017-01-01T02:00:00Z")
},
...

目标

进行单个聚合查询以获取该年度的所有月份总计。我不能使用$ month运算符,因为我查询UTC数据但需要本地时区分组。

当前解决方案

我目前可以通过制作12个单独的查询来实现这一目标,如下所示:

db.data.aggregate([
{
    $match: {
        "date": {
            "$gte": ISODate("2017-01-01T08:00:00Z"),
            "$lte": ISODate("2017-01-31T08:00:00Z")
        }
    }
},
{
    $group: {
        "_id": "$date",
        total: {
            $sum: "$value"
        }
    }
}
])

注意:请注意8小时的偏移以获取PST中的分组

这会让我获得1月份的总数,但之后我需要针对不同的匹配条件每隔一个月进行一次额外的查询。

0 个答案:

没有答案
相关问题