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