gpt4 book ai didi

python - Mongodb TTL 提前过期文档

转载 作者:IT老高 更新时间:2023-10-28 13:24:14 26 4
gpt4 key购买 nike

我正在尝试将文档插入 Mongo 数据库并让它在预定时间后自动过期。到目前为止,即使我将“expireAfterSeconds”设置为更长的时间,我的文档也会在 0 到 60 秒内被插入但总是从数据库中删除。我知道 mongodb 大约每 60 秒删除一次过期文档,因此“expredAfterSeconds”变量似乎不起作用。

我遵循了这里的文档: Mongodb TTL Docs

这是我的测试代码,应该在 3 分钟后过期(删除)文档(但它会在一分钟内完成):

import pymongo
import datetime

mongo_con = pymongo.Connection('localhost', 27017)
mongo_db = mongo_con.Mongo_database
mongo_col = mongo_db.my_TTL_collection

timestamp = datetime.datetime.now()

mongo_col.ensure_index("date", expireAfterSeconds=3*60)

mongo_col.insert({'_id': 'login_session', "date": timestamp, "session": "test session"})

有人知道问题是什么吗?

最佳答案

您的问题来自在本地时区使用简单的时间戳。 FAQ of pymongo有一个条目,其中包含不使用 datetime.datetime.now() 的警告。使用 utcnowttl 设置按预期工作:

import pymongo
import datetime

mongo_con = pymongo.Connection('localhost', 27017)
mongo_db = mongo_con.Mongo_database
mongo_col = mongo_db.my_TTL_collection

timestamp = datetime.datetime.now()
utc_timestamp = datetime.datetime.utcnow()

mongo_col.ensure_index("date", expireAfterSeconds=3*60)

mongo_col.insert({'_id': 'session', "date": timestamp, "session": "test session"})
mongo_col.insert({'_id': 'utc_session', "date": utc_timestamp, "session": "test session"})
# the utc_session will be deleted after around 3 minutes,
# the other depending on your timezone

关于python - Mongodb TTL 提前过期文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com