【发布时间】:2015-06-21 11:47:07
【问题描述】:
我有一个存储在 MongoDB 中的文档集合,其中包括一个 created 字段作为 unix 样式 time_t:
例如
{"created": 1137459055216, "qty": 3 }
如何通过查询按月汇总这些数据?
【问题讨论】:
标签: mongodb mongoose aggregation-framework
我有一个存储在 MongoDB 中的文档集合,其中包括一个 created 字段作为 unix 样式 time_t:
例如
{"created": 1137459055216, "qty": 3 }
如何通过查询按月汇总这些数据?
【问题讨论】:
标签: mongodb mongoose aggregation-framework
您可以通过将计数添加到 new Date(0) 将 unix epoch ms 计数转换为原生 Date 对象以进行聚合。例如:
db.test.aggregate([
{$group: {
_id: {$month: {$add: [new Date(0), '$created']}},
qty: {$sum: '$qty'}
}}
])
或者,如果您想按月和年汇总,添加一个进行转换的$project,然后您可以轻松地在您的$group 中多次引用它:
db.test.aggregate([
{$project: {
createdDate: {$add: [new Date(0), '$created']},
qty: '$qty'
}},
{$group: {
_id: {
year: {$year: '$createdDate'},
month: {$month: '$createdDate'}
},
qty: {$sum: '$qty'}
}}
])
请注意,如果 created 是 秒 计数而不是 ms 计数,您还需要将其乘以 1000:
createdDate: {$add: [new Date(0), { $multiply: ['$created', 1000] }]}
【讨论】:
created 时间只有在它是 ms 时才有意义,所以这就是我的假设。我会将其添加到答案中,谢谢。