提问者:小点点

如何在MongoDB中检索每个文档的最后更新时间?


我想知道是否有办法在MongoDB中获取集合中数据(即文档)的最后更新/修改时间。更清楚地说,我想进行查询以检索在特定时间之后更新的所有文档。

是否有任何可能的方法来检索MongoDB中最后修改的时间戳?

注意:对于新创建的文档,我知道我们可以从object tId中检索时间戳,但是对于更新,id将是相同的。MongoDB是否将每个文档的最后更新时间存储在任何地方?

我使用莫菲亚作为java驱动程序,所以如果有任何可能的方法从莫菲亚,请让我知道。


共3个答案

匿名用户

您需要自己捕获上次更新时间。

对于我的应用程序,我保留了一个AuditTrail对象,它捕获AuditEvents。这些事件发生在对象的任何插入、更新或删除时(删除在我的系统中是虚拟的,只需设置一个标志)。

对于每个AuditEvent,我跟踪日期、经过身份验证的用户、数据库操作和应用程序填写的描述。这是在PerstientObject中实现的,因此它会自动为保存在Mongo中的任何对象的任何数据库操作调用。

这实际上花了很少的时间来实现,但它提供了获取上次更新时间的能力,以及Mongo中所有内容的安全性和客户支持所需的任何其他信息。

匿名用户

不,MongoDB本身不存储创建或更新时间戳。您必须自己做这件事(正如您所发现的,如果您使用ObjectID_id那么您已经获得了创建日期)。

匿名用户

您可以使用@user1530669提到的审计跟踪实体(我称之为我的增量-代码已经在StackOverflow的某个地方可用)。

或者你可以简单地保存最后的更改时间。我通常使用一个基本实体来设置它,所有其他实体都扩展它(对于您的特定要求,您可能可以删除creationDate,因为lastChange对您来说就足够了):

protected Date creationDate;
protected Date lastChange;

// Getters and setters or final setters which don't do anything,
// if you only want to allow the entity to update the values

@PrePersist
public void prePersist() {
    creationDate = (creationDate == null) ? new Date() : creationDate;
    lastChange = (lastChange == null) ? creationDate : new Date();
}

然后,您可以在查询中添加一个过滤器,以便lastChange属性比您的检索限制更新。