Python MongoDB TTL索引不';不要删除过期的文档
我试图创建一个名为Python MongoDB TTL索引不';不要删除过期的文档,python,mongodb,mongoengine,robo3t,Python,Mongodb,Mongoengine,Robo3t,我试图创建一个名为ttl的集合,并使用ttl索引,使该集合中的文档在30秒后过期 我使用如下方法创建了该集合: class Ttl(Document): meta = { 'indexes': [ { 'name': 'TTL_index', 'fields': ['expire_at'], 'expireAfterSeconds': 0
ttl
的集合,并使用ttl索引,使该集合中的文档在30秒后过期
我使用如下方法创建了该集合:
class Ttl(Document):
meta = {
'indexes': [
{
'name': 'TTL_index',
'fields': ['expire_at'],
'expireAfterSeconds': 0
}
]
}
expire_at = DateTimeField()
该索引已创建,Robo3T显示其符合预期
使用mongoengine
将实际文档插入到集合中:
current_ttl = models.monkey.Ttl(expire_at=datetime.now() + timedelta(seconds=30))
current_ttl.save()
保存成功(文档已插入数据库),但从未过期
如何使文档过期
我也在这里添加收藏的内容,以防保存错误。这些是运行db.getCollection('ttl').find({})
的结果:
根据db.getCollection('ttl').getIndexes()的结果,索引本身是:
/* 1 */
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "monkeyisland.ttl"
},
{
"v" : 2,
"key" : {
"expire_at" : 1
},
"name" : "TTL_index",
"ns" : "monkeyisland.ttl",
"background" : false,
"expireAfterSeconds" : 0
}
]
我的db.version() 问题在于:
current_ttl = models.monkey.Ttl(expire_at=datetime.now() + timedelta(seconds=30))
那应该是
current_ttl = models.monkey.Ttl(expire_at=datetime.utcnow() + timedelta(seconds=30))
请从mongo
shell(不是从Robo3T)发布db.ttl.getIndexes()的输出。我有一种预感,TTL索引的设置并不像您预期的那样。嗨@KevinAdistambha我在问题的正文中添加了集合的索引,有什么想法吗?还添加了DB版本“_(ツ)_/¯
current_ttl = models.monkey.Ttl(expire_at=datetime.utcnow() + timedelta(seconds=30))