Mongodb TTL expira los documentos temprano

Estoy intentando insertar un documento en una base de datos Mongo y hacer que caduque automáticamente después de un tiempo predeterminado. Hasta ahora, mi documento se inserta, pero siempre se borra de la base de datos de 0 a 60 segundos, aunque establezca el ‘expireAfterSeconds’ por mucho más tiempo. Sé que mongodb elimina documentos caducados cada 60 segundos, por lo que parece que la variable ‘expredAfterSeconds’ no funciona.

Seguí la documentación aquí: Mongodb TTL Docs

Aquí está mi código de prueba que debe expirar (eliminar) el documento después de 3 minutos (pero lo hace en menos de un minuto):

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

¿Alguien tiene alguna idea de cuál es el problema?

Sus problemas provienen del uso de marcas de tiempo ingenuas en su zona horaria local. La sección de preguntas frecuentes de pymongo tiene una entrada que incluye una advertencia de no usar datetime.datetime.now() . Usando utcnow , la utcnow ttl funciona como se espera:

 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 

Para Pymongo 3 esta es la syntax actualizada.

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