mongodb文档更新后何时过期?

mongodb文档更新后何时过期?,mongodb,upsert,Mongodb,Upsert,我在mongodb中有一组文档,在日期类型索引上设置了expireAfterSeconds属性 为了便于讨论,文档设置为一小时后过期 更新此集合中的文档时,将发生以下哪种情况? a)文档将在原始创建时间后一小时过期 b)文档将在更新时间后一小时过期 c)文档将在索引变量的时间后一小时过期,不管是什么时间 d)以上都没有 我认为它是c,但找不到证实它的参考资料。我说得对吗?这在哪里有记录 [编辑]:为了澄清,我存储的是密码重置代码(应该过期),如果请求新代码,我希望旧代码停止工作。不过,这不是很重

我在mongodb中有一组文档,在日期类型索引上设置了
expireAfterSeconds
属性

为了便于讨论,文档设置为一小时后过期

更新此集合中的文档时,将发生以下哪种情况?

a)文档将在原始创建时间后一小时过期

b)文档将在更新时间后一小时过期

c)文档将在索引变量的时间后一小时过期,不管是什么时间

d)以上都没有

我认为它是c,但找不到证实它的参考资料。我说得对吗?这在哪里有记录


[编辑]:为了澄清,我存储的是密码重置代码(应该过期),如果请求新代码,我希望旧代码停止工作。不过,这不是很重要,因为我可以通过简单地删除旧事务来确保我想要的行为始终得到尊重。这个问题不是关于我目前的问题,而是关于Mongo的行为。

正确答案是c)

expireAfterSeconds属性始终要求对包含BSON日期的字段建立索引,因为此日期字段的内容用于选择要删除的条目

如果要更新文档以重置生存时间,请同时将索引日期字段更新为当前时间

当您希望更新不会影响TTL时,只需不更新日期即可

但是,请记住,expireAfterSeconds不能保证立即删除文档。删除由每分钟运行的后台作业完成。此作业的优先级较低,当当前负载较高时,MongoDB可以延迟此作业。因此,当过期时间精确到秒对于您的用例很重要时,您应该在应用程序级别添加额外的检查


此功能记录在此处:

如果您不想依靠mongo demon进程使集合过期,然后最好在集合上创建一个额外的createdOn字段,并将其与当前时间戳进行比较,以决定是否使用该文档。

Am目前正在测试该行为。删除操作的持续时间取决于您正在运行的mongod实例的工作负载,你能详细说明一下你目前的情况吗?见最新答案。不过,我目前的情况与此无关。我知道删除需要时间,具体时间取决于负载。据我所知,Mongo DB遵循一个删除过期文档的过程,首先删除部分相关联的索引,然后删除必须删除的文档,最后删除DocsHanks Philipp时必须更新的任何其他索引。这正是我所想的,但我没有发现文档对此有明确的说明。回答很好-完整、简洁。这与MongoDB的操作方式无关,需要外部处理(这超出了原始问题的范围)。