我想捕获插入到MongoDB数据库中的文档的插入和更新。对于插入,可以这样做,因为文档创建时间是在ObjectID中编码的。
例如,我可以插入文档:
notificationManager.notify(notifyId, builder.build());
notifyId++;
...然后检索该文档的时间戳:
> db.test.insertOne(
... { docnum: 1}
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("58bcee87fcf4a79f8157dfad")
}
如果我然后更新该文件:
> ObjectId("58bcee87fcf4a79f8157dfad").getTimestamp()
ISODate("2017-03-06T05:07:19Z")
...文档时间戳不会更改,因为时间戳是创建时间戳而不是上次更新的时间戳:
> db.test.updateOne(
... { docnum: 1 },
... {
... $set: { "text": "Some text." }
... }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
一个明显的解决方案是更改应用程序以包含更新的时间戳。在这种情况下,我不控制应用程序,只控制MongoDB。
如果是MySQL,可以添加更新/创建的时间戳:
> db.test.find()
{ "_id" : ObjectId("58bcee87fcf4a79f8157dfad"), "docnum" : 1, "text" : "Some text." }
> ObjectId("58bcee87fcf4a79f8157dfad").getTimestamp()
ISODate("2017-03-06T05:07:19Z")
MongoDB是否与此相当?我读到MongoDB不支持触发器或存储过程,但我很想知道是否有常用的解决方法/黑客来执行此操作。
答案 0 :(得分:0)
MongoDB本身不保存任何时间戳。如果您使用的是Mongoose,则可以指定在创建/更新
上存储时间戳var thingSchema = new Schema({..}, { timestamps: true });