如何使用_id作为时间戳将createAt字段添加到Mongodb中

如何使用_id作为时间戳将createAt字段添加到Mongodb中,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我有一个已经存在200个数据的用户集合,我忘记在模式中设置createAt字段 现在我想更新所有已存在的字段,并使用已经是时间戳的_id添加到数据库中 所以我想要的是一个查询,它将_id转换成日期,并保存到我正在使用的robo 3T的现有数据中 如果我问了一个愚蠢的问题,请原谅。我是mongodb新手这是robo mongo查询,它在mongo控制台中不起作用 db.getCollection('collectionNameGoesHere').find({}, { _id: 1 }).

我有一个已经存在200个数据的用户集合,我忘记在模式中设置createAt字段

现在我想更新所有已存在的字段,并使用已经是时间戳的_id添加到数据库中

所以我想要的是一个查询,它将_id转换成日期,并保存到我正在使用的robo 3T的现有数据中


如果我问了一个愚蠢的问题,请原谅。我是mongodb新手

这是robo mongo查询,它在mongo控制台中不起作用

db.getCollection('collectionNameGoesHere').find({}, {
    _id: 1
}).forEach(function (doc) {
    db.getCollection('collectionNameGoesHere').update({
        _id: doc._id
    }, {
        $set: {
            createdAt: doc._id.getTimestamp()
        }
    }, {
        upsert: false,
        multi: true
    })
});

您可以使用这两个查询中的任何一个来创建带有日期/时间戳的createdAt字段,该字段来自_id。第一个查询适用于MongoDb 4.0+版本,第二个查询适用于MongoDb 4.2版本

注意这些工作在Mongo Shell中进行,而不是在robo3T中进行测试


请在jsoneditor Online上共享收藏为什么需要收藏?我只想在集合中添加一个字段。所以集合可以是任何东西。您使用的是哪个Mongo版本?4.2.0@tomslabbaert
db.test.aggregate( [
  { 
      $project: { createdAt: { $toDate: "$_id" } } 
  }
] ).forEach( doc => db.test.updateOne( { _id: doc._id }, { $set: { createdAt: doc.createdAt } } ) )


db.test.updateMany(
  { },
  [
      { $set: { createdAt: { $toDate: "$_id" } } }
  ]
)