汇总在MongoDB中存储为time_t的数据

时间:2015-06-20 20:09:59

标签: mongodb mongoose aggregation-framework

我有一个存储在MongoDB中的文档集合,其中包含created字段作为unix样式time_t

e.g。

{"created": 1137459055216, "qty": 3 }

如何通过查询按月汇总此数据?

1 个答案:

答案 0 :(得分:2)

您可以通过将计数添加到Date,将unix epoch ms计数转换为本机new Date(0)对象进行聚合。例如:

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] }]}