【问题标题】:MongoDB: How to get the last updated timestamp of the last updated document in a collectionMongoDB:如何获取集合中最后更新文档的最后更新时间戳
【发布时间】:2018-05-20 01:27:49
【问题描述】:

是否有一种简单或优雅的方法(或我可以编写的查询)来检索集合中的最后更新时间戳(最后更新文档的)。我可以编写这样的查询来查找最后插入的文档

db.collection.find().limit(1).sort({$natural:-1})

但我需要有关上次更新文档的信息(可能是插入或更新)。

我知道一种方法是在 oplog 集合中查询集合中的最后一条记录。但考虑到 oplog 的大小可能非常大(也不可信,因为它是一个有上限的集合),这似乎是一项昂贵的操作。有一个更好的方法吗?

谢谢!

【问题讨论】:

标签: mongodb mongodb-query mongodb-oplog


【解决方案1】:

您可以按照问题中提到的方式获得最后插入时间:

db.collection.find().sort({'_id': -1}).limit(1) 

但是,没有任何好方法可以查看上次更新/删除时间。但是,如果您使用的是副本集,您可以从oplog 获得。

或者,您可以在文档中添加新字段为'lastModified'。 您也可以结帐collection-hooks。我希望这会有所帮助

【讨论】:

  • oplog 并不总是一个可信赖的来源(它是有上限的集合)。还是谢谢。
  • 您可以使用ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()获取ObjectID时间戳
【解决方案2】:
  1. 一种方法是使用一个字段来保存上次更新的时间。你可以把它命名为updatedAt。每次对文档进行更新时,您只需将值更新为当前时间。如果您使用 ISO 格式存储时间,您将能够毫无问题地进行排序(这是我使用的)。

  2. 另一种方式是 _id 字段。

方法一 db.collection.find().limit(1).sort({updatedAt: -1})

方法二 db.collection.find().limit(1).sort({_id: -1})

【讨论】:

    【解决方案3】:

    你可以试试,

    db.collection.findOne().sort({$natural:-1}).limit(1);
    

    【讨论】:

    • 这将只返回集合中的第一个文档。
    • 你可以检查输出@AnirudhBagri
    • @DaminiSuthar 我在每个文档中都没有包含上次更新时间戳的字段。 (我相信这就是你在这里假设的)
    • 检查已编辑,我为此添加了时间戳字段
    • findOne.sort() 无效。我相信你在谈论 find().sort()。请再次阅读我的问题,因为我提到了相同的查询以及为什么它对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多