Java Spring Boot 嵌入式 MongoDB 不会触发 TTL 删除



我正在尝试测试短期集合的MongoDB TTL功能。在字段上使用@Indexed注释,如下所示:

@Indexed(name = "deleteAt", expireAfterSeconds = 5)
private Date deleteAt;

在构造函数中,我将 deleteAt 初始化为this.deleteAt = new Date()我希望在将我的文档插入 Mongo 后,在 TTLManager 运行后,该集合将被删除。但是即使等待几分钟也没有帮助,它也没有被删除。我在 mongo shell 中运行db.serverStatus().metrics.ttl,它返回:

[
{
"deletedDocuments": 0,
"passes": 8
}
]

命令db.adminCommand({getParameter:1, ttlMonitorEnabled: 1})返回:

[
{
"ok": 1,
"ttlMonitorEnabled": true
}
]

我的代码有问题吗?还是因为嵌入式 mongo 不支持这个,是否可以配置嵌入式 mongo 让它工作? 我正在使用 https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo 用于具有默认设置的嵌入式MongoDB。

它只是MongoDB服务器(mongod(的功能

mongod中的后台线程读取索引中的值,并从集合中删除过期的文档。

https://docs.mongodb.com/manual/core/index-ttl/#delete-operations

嵌入式MongoDB框架仅使用MongodProcess类"模拟"mongod进程,以部署基本的嵌入式服务器。

https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo/blob/master/src/main/java/de/flapdoodle/embed/mongo/MongodProcess.java

最新更新