我正在尝试测试短期集合的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