【发布时间】:2016-12-31 06:33:09
【问题描述】:
我想在 mongoDB 中使用组聚合,以便根据创建日期对我的文档进行分组。我没有将创建日期保存为字段,但我知道我可以从我的 ObjectId 中提取此日期。所以,我试着写这样的东西:
db.sales.aggregate(
[
{
$group : {
_id : { month: {$month: ObjectId("$_id").getTimestamp()},
day: {$dayOfMonth: ObjectId("$_id").getTimestamp()},
year: {$year: ObjectId("$_id").getTimestamp()}
},
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
我得到这个错误: 错误:无效的对象 ID:长度: @(shell):5:37
当我写一个特殊的 ObjectId 而不是“$_id”时,它可以工作。例如: ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
当我有一个日期字段来存储我的创建日期并写下这样的内容时,它也可以工作:
db.sales.aggregate(
[
{
$group : {
_id : { month: {$month: "$date"},
day: {$dayOfMonth: "$date"},
year: {$year: "$date"}
},
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
但我想知道,我怎样才能直接使用我的 ObjectId 并获取时间戳。
按聚合分组及其相关数据可在此链接中找到: https://docs.mongodb.com/manual/reference/operator/aggregation/group/
但是我用我的自动 mongoDB 生成的 id 替换了这个示例中的简单整数 id 。
【问题讨论】:
标签: mongodb timestamp aggregation-framework