我正在尝试将文档插入 Mongo 数据库并让它在预定时间后自动过期。到目前为止,我的文档已被插入,但总是会在 0 - 60 秒内从数据库中删除,即使我将“expireAfterSeconds”设置得更长。我知道 mongodb 大约每 60 秒删除一次过期文档,因此“expredAfterSeconds”变量似乎不起作用。
我按照这里的文档进行操作:Mongodb TTL 文档 http://docs.mongodb.org/manual/tutorial/expire-data/
这是我的测试代码,应该在 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"})
有人知道问题是什么吗?
您的问题来自于在本地时区使用天真的时间戳。这pymongo常见问题解答 http://api.mongodb.org/python/current/faq.html#what-is-the-correct-way-to-handle-time-zones-with-pymongo有一个条目包含禁止使用的警告datetime.datetime.now()
.
Using utcnow
, the ttl
- 设置按预期工作:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)