'expireAfterSeconds' 未删除 MongoRepository 中的文档

Document in MongoRepository not deleted with 'expireAfterSeconds'

我希望我的 MongoRepository 在 Spring 引导中在创建后的某个时间点自动删除文件。因此我创建了以下 class:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;

public class MyDocument {
    @Id
    private String id;
    @Indexed
    private String name;
    @Indexed(expireAfterSeconds = 0)
    private LocalDateTime deleteAt;
}

然后,我将它保存在 Spring 引导 MongoRepository:

MyDocument doc = modelMapper.map(myDocumentDto, MyDocument.class);
LocalDateTime timePoint = LocalDateTime.now();
timePoint = timePoint.plusMinutes(1L);
doc.setDeleteAt(timePoint);
docRepository.save(doc);

我定期查询存储库并假设一分钟后文档将不再存在。不幸的是,我每次查询都会得到文档,而且它永远不会被删除。

我做错了什么?

文档持久化如下(.toString()):

MyDocument{id='5915c65a2e9b694ac8ff8b67', name='string', deleteAt=2017-05-12T16:28:38.787}

是否MongoDB可能无法读取和处理LocalDateTime格式?我正在使用 org.springframework.data:spring-data-mongodb:1.10.1.RELEASE,因此 JSR-310 应该已经在 2015 年宣布支持:https://spring.io/blog/2015/03/26/what-s-new-in-spring-data-fowler

我可以解决这个问题:

首先,java.time.LocalDateTime与Spring数据/MongoDB没有问题。 为了清楚起见,在索引中添加一个名称,例如@Indexed(name = "deleteAt", expireAfterSeconds = 0)。虽然可能不需要此步骤。但是,添加 @Document 注释有很大帮助:

@Document(collection = "expiringDocument")

当我在我的应用程序处于 运行 时删除整个集合时,新的文档插入将再次创建集合但没有索引。为确保创建索引,请重新启动应用程序。