Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MongoDB TTL索引不';不要删除过期的文档_Python_Mongodb_Mongoengine_Robo3t - Fatal编程技术网

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))