'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")
当我在我的应用程序处于 运行 时删除整个集合时,新的文档插入将再次创建集合但没有索引。为确保创建索引,请重新启动应用程序。
我希望我的 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")
当我在我的应用程序处于 运行 时删除整个集合时,新的文档插入将再次创建集合但没有索引。为确保创建索引,请重新启动应用程序。