Ebr*_*ata 5 mongodb mongodb-query
简而言之,问题是:有没有办法自动createdAt向 MongoDB 集合中插入的每个文档添加字段?
场景:我正在使用 MongoDB 的 dockerized 实例,并且希望createdAt在插入时自动向每个文档添加字段。我想使用 MongoDB 本身来实现这一点,因为数据库可以有多个输入通道,如 Logstash、Python 代码等。
注意:我应该能够使用docker-entrypoint-initdb.d.
是否有一个钩子或其他东西我可以用来自动实现这一目标?
本质上,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)