【发布时间】:2013-07-18 03:13:02
【问题描述】:
我正在尝试将 ObjectId 用作创建日期持有者,但在尝试进行聚合查询时遇到了一些问题。特别是我们希望使用日期聚合运算符按月对文档进行分组,但该运算符显然不适用于 ObjectId。有没有办法解决它,还是我必须开始为每个文档使用单独的 CreationTime 字段?
这是我正在尝试的查询 -
db.People.aggregate([
{
$match: {
$or: [{"Name":"Random1"}, {"Name":"Random2"}]
}
},
{
$project: {
Name: "$Name",
Year: {$year: "$_id"},
Month: {$month: "$_id"}
}
},
{
$group: {
_id: {Name: "$Name", Year: "$Year", Month: "$Month"},
TotalRequests: {$sum:1}
}
}
])
【问题讨论】:
-
如果 _id 是 ObjectId 类型,它不能工作,因为它不是一个日期。它是日期的哈希值。据我所知,反向操作是不可能的。
-
实际上 ObjectID 有一个getTimestamp() method,但不可能在 AF 上使用它。如果你真的想要这个功能,你应该对thisJIRA 问题投票。
标签: mongodb aggregation-framework