是否有一种简单或优雅的方法(或我可以编写的查询)来检索集合中的最后更新时间戳(最后更新文档的)。我可以编写这样的查询来查找最后插入的文档
db.collection.find().limit(1).sort({$natural:-1})
但我需要有关上次更新文档的信息(可能是插入或更新)。
我知道一种方法是在 oplog 集合中查询集合中的最后一条记录。但考虑到 oplog 的大小可能非常大(也不可信,因为它是一个有上限的集合),这似乎是一项昂贵的操作。有一个更好的方法吗?
谢谢!
是否有一种简单或优雅的方法(或我可以编写的查询)来检索集合中的最后更新时间戳(最后更新文档的)。我可以编写这样的查询来查找最后插入的文档
db.collection.find().limit(1).sort({$natural:-1})
但我需要有关上次更新文档的信息(可能是插入或更新)。
我知道一种方法是在 oplog 集合中查询集合中的最后一条记录。但考虑到 oplog 的大小可能非常大(也不可信,因为它是一个有上限的集合),这似乎是一项昂贵的操作。有一个更好的方法吗?
谢谢!
您可以按照问题中提到的方式获得最后插入时间:
db.collection.find().sort({'_id': -1}).limit(1)
但是,没有任何好方法可以查看上次更新/删除时间。但是,如果您使用的是副本集,则可以从oplog.
或者,您可以在文档中添加新字段为'lastModified'. 您还可以签出 collection-hooks。我希望这个能帮上忙
一种解决方法是拥有一个保存上次更新时间的字段。你可以把它命名为updatedAt。每次对文档进行更新时,您只需将值更新为当前时间。如果您使用 ISO 格式存储时间,您将能够毫无问题地进行排序(这就是我使用的)。
另一种方式是 _id 字段。
方法一 db.collection.find().limit(1).sort({updatedAt: -1})
方法2 db.collection.find().limit(1).sort({_id: -1})
你可以试试,
db.collection.findOne().sort({$natural:-1}).limit(1);