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

Aggregate data stored as time_t in MongoDB

我在 MongoDB 中存储了一组文档,其中包括一个 created 字段作为 unix 样式 time_t:

例如

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

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

您可以将 unix 纪元 ms 计数转换为本机 Date 对象以通过将计数添加到 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 计数而不是毫秒计数,您还需要将其乘以 1000:

createdDate: {$add: [new Date(0), { $multiply: ['$created', 1000] }]}