我将数据存储在小时桶中。简化结构:
{
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月份的总数,但之后我需要针对不同的匹配条件每隔一个月进行一次额外的查询。