python - Mongodb TTL 清理不起作用

标签 python mongodb ttl

我试图让 Mongo 删除具有 TTL 功能的文档,但没有成功。尝试了很多东西,但 mongo 似乎没有清理。

我的索引:

    {
    "v" : 1,
    "key" : {
        "date" : 1
    },
    "name" : "date_1",
    "ns" : "history.history",
    "expireAfterSeconds" : 60
}

文档中的日期值:

       "date" : "2016-09-29 11:08:46.461207",

db.serverStatus().metrics.ttl 的输出:

{ "deletedDocuments" : NumberLong(0), "passes" : NumberLong(29) }

db.serverStatus() 的时间输出:

"localTime" : ISODate("2016-09-29T11:19:45.345Z")

我唯一怀疑的是我从 Python 插入值的方式。可能是它在某种程度上是错误的。我有一个包含以下元素的 JSON 文档:

"date": str(datetime.utcnow()), 

问题可能出在哪里的任何线索?

谢谢, 贾尼斯

最佳答案

如您所料,问题在于如何插入日期值。我会引用 docs :

If the indexed field in a document is not a date or an array that holds a date value(s), the document will not expire.

您正在将日期转换为字符串。如果您使用的是 pymongo 驱动程序,他会很好地处理日期时间并将其转换为 MongoDB native Date type .

这样,下面的应该可以工作:

"date": datetime.utcnow()

关于python - Mongodb TTL 清理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768934/

相关文章:

python - 变量的范围(局部全局和非局部)如何适用于 Python 中的 List 等可变对象?

node.js - Node +express session 数据

MongoDB TTL 但做其他事情

python - Python 2.6 是否有内置的 URL 参数解析器?

Python 正则表达式 : Turn "ThisFileName.txt" into "This File Name.txt"

node.js - Mongoose /Node 错误 : Cannot read property 'ObjectId' of undefined

java - 带有 mongodb 的 Spring Data - 如何访问文档中的动态字段?

mongodb 每个文档都有不同的 TTL

redis 键设置为过期实际上没有删除

Python 跟不上时间