我的生活时间有问题" MongoDB中的设置。我在我的实体中的Spring-Boot 2.0.2.RELEASE项目中创建了一个索引注释,该项目代表MongoDB中的Document。我设置了" expireAfterSeconds"测试为15秒,但MongoDB在15秒后没有删除插入的文档。有人能告诉我我做错了吗?
这是作为JSON的MongoDB索引:
[
2,
{
"createdDateTime" : 1
},
"deleteAt",
"AccountServiceDB.AccountRegistration",
NumberLong(15)
]
这是我的实体:
@Document(collection = "AccountRegistration")
public class UserRegistration {
@Id
private ObjectId _id;
@Indexed(unique = true)
private String username;
@Indexed(unique = true)
private String email;
private String user_password;
@Indexed(name = "deleteAt", expireAfterSeconds = 15)
private Date createdDateTime;
public UserRegistration() {}
public ObjectId get_id() {
return _id;
}
public void set_id(ObjectId _id) {
this._id = _id;
}
}
答案 0 :(得分:0)
首先检查索引是否正确创建。使用 mongo-shell,您可以执行 db.collection.getIndexes()
,它应该沿着 TTL 索引返回给定集合的索引,例如
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "sample.collectionsName"
},
{
"v" : 2,
"key" : {
"dateField" : 1
},
"name" : "dateField",
"ns" : "sample.collectionname",
"expireAfterSeconds" : NumberLong(5)
}
]
如果这不起作用,您需要使用
启用索引创建 auto-index-creation: true
完成所有这些设置后,您应该会看到您的文档确实被删除了,但是请考虑 mongod-ttl 工作。此作业每 60 秒运行一次,这意味着具有 TTL 索引的文档最初可能会错过第一次清理运行,并且需要 +60 秒才能删除。
这在 JJussi 固定的文档中也得到了完美的描述。
答案 1 :(得分:-1)
Here是解释:"删除过期文档的后台任务每60秒运行一次。因此,在文档到期和运行后台任务之间的期间,文档可能会保留在集合中。"