在 MongoDB 中添加createdAt的本机方法

Ebr*_*ata 5 mongodb mongodb-query

简而言之,问题是:有没有办法自动createdAt向 MongoDB 集合中插入的每个文档添加字段?

场景:我正在使用 MongoDB 的 dockerized 实例,并且希望createdAt在插入时自动向每个文档添加字段。我想使用 MongoDB 本身来实现这一点,因为数据库可以有多个输入通道,如 Logstash、Python 代码等。

注意:我应该能够使用docker-entrypoint-initdb.d.

是否有一个钩子或其他东西我可以用来自动实现这一目标?

R2D*_*2D2 6

本质上,createdAt 时间戳包含在新插入文档的默认 mongoDB _id 字段的前 4 个字节内,因此通常您不需要再添加一个包含相同数据的字段:

> db.yourCollection.findOne()._id.getTimestamp()
ISODate("2022-05-05T02:57:31Z")
Run Code Online (Sandbox Code Playgroud)

但现代框架添加了此选项,例如在 node.js 中,您可以添加如下内容:

 var yourSchema = new Schema({..});
 yourSchema.set('timestamps', true);
Run Code Online (Sandbox Code Playgroud)

这将通过框架在插入或更新操作时自动将“createdAt”和“updatedAt”字段添加到文档中......或者如果您只需要createdAt:

 var yourSchema = new Schema({..}, { timestamps: { createdAt: 'created_at' } });
Run Code Online (Sandbox Code Playgroud)

还有一个名为$setOnInsert的选项,您可以在 upsert 操作期间添加createdAt:

 db.yourCollection.updateOne(
  { _id: 1 },
  {
   $set: { item: "Some item" },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
 )
Run Code Online (Sandbox Code Playgroud)