Mongodb TTL提前过期文档

2024-04-20 04:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个文档插入到Mongo数据库中,并让它在预定时间后自动过期。到目前为止,我的文档被插入,但总是在0到60秒之间从数据库中删除,即使我将“expireAfterSeconds”设置得更长。我知道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"})

有人知道问题出在哪里吗?


Tags: 文档import数据库dbdatetimedatesessionmongo
2条回答

您的问题来自于在本地时区中使用原始时间戳。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

对于Pymongo 3,这是更新的语法。

mongo_collection.create_index("date", expireAfterSeconds=3*60)

相关问题 更多 >