在MongoDB中添加createdAt的原生方式



问题简而言之:是否有自动添加createdAt字段到每个文档中插入在MongoDB的集合?

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

注意:我应该能够在docker-entrypoint-initdb.d中使用init文件执行JavaScript代码。

我是否可以使用钩子或其他东西来自动实现这一点?

createdAt时间戳包含在新插入文档的默认mongoDB _id字段的前4个字节内,所以通常你不需要一个更多的字段将包含相同的数据:

> db.yourCollection.findOne()._id.getTimestamp()
ISODate("2022-05-05T02:57:31Z")

但是现代框架添加了这个选项例如在node.js中你可以添加这样的内容:

var yourSchema = new Schema({..});
yourSchema.set('timestamps', true);

将添加"createdAt"one_answers";updatedAt"字段通过框架自动插入或更新操作到文档。或者只需要createdAt:

var yourSchema = new Schema({..}, { timestamps: { createdAt: 'created_at' } });

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

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

最新更新