我希望Spring Boot中的MongoRepository
能够在创建后的某个时间点自动删除文档。因此我创建了以下类:
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 Boot 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
答案 0 :(得分:1)
我可以解决这个问题:
首先,java.time.LocalDateTime
对Spring Data / MongoDB没有问题。
为了澄清,请为索引添加名称,例如@Indexed(name = "deleteAt", expireAfterSeconds = 0)
。但是可能不需要此步骤。但是,添加@Document
注释有很多帮助:
@Document(collection = "expiringDocument")
当我的应用程序运行时删除整个集合时,新的文档插入将再次创建集合但没有索引。要确保创建索引,请重新启动应用程序。