小编Sim*_*one的帖子

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?

我想在 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 }
        }
      }
   ]
)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:错误:无效对象 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 }
        }
      }
   ]
)
Run Code Online (Sandbox Code Playgroud)

但我想知道,我怎样才能直接使用我的 ObjectId …

timestamp mongodb aggregation-framework

5
推荐指数
1
解决办法
2293
查看次数

标签 统计

aggregation-framework ×1

mongodb ×1

timestamp ×1