7

ドキュメントをMongoデータベースに挿入しようとしており、所定の時間後に自動的に期限切れになります。これまでのところ、「expireAfterSeconds」をもっと長く設定しても、ドキュメントは挿入されますが、常に 0 ~ 60 秒でデータベースから削除されます。mongodb は約 60 秒ごとに期限切れのドキュメントを削除することを知っているため、「expredAfterSeconds」変数が機能していないようです。

ここのドキュメントに従いました: Mongodb TTL Docs

これは、3 分後にドキュメントの有効期限が切れる (削除される) はずのテスト コードです (ただし、1 分以内に終了します)。

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

誰が問題が何であるかについて何か考えがありますか?

4

2 に答える 2

18

問題は、ローカル タイムゾーンでナイーブなタイムスタンプを使用することから発生します。pymongoのFAQ には、使用しないようにという警告を含むエントリがありますdatetime.datetime.now()。を使用するutcnowと、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
于 2013-12-06T20:44:00.800 に答える
5

Pymongo 3 の場合、これは更新された構文です。

mongo_collection.create_index("date", expireAfterSeconds=3*60)
于 2016-07-20T05:24:08.043 に答える