Пимонго и ТТЛ неправильно истекли - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу сохранить данные в MongoDB, используя pymongo, и через месяц (возможно, меньше) срок их действия истекает автоматически, если никто не удаляет их раньше (другой скрипт выполнит чтение + удаление).

ВСейчас я тестирую TTL с expireAfterSeconds, и он работает не так, как мне бы хотелось.Вот мой пример:

client = MongoClient()
db = client.save_db
model = db.save_co
model.create_index("inserted", expireAfterSeconds = 120)
inserted_id = model.insert_one({"order_number":123456789, "inserted":datetime.datetime.utcnow()}).inserted_id

i = 1
while model.find_one(inserted_id) is not None:
    time.sleep(1)
    i += 1

print(i)
exit()

Я думаю, что напечатанное значение должно быть 120, но на самом деле это 154, или 160, а иногда 123.

Я не знаюне понимаю, что я делаю не так, любая помощь?Спасибо

1 Ответ

0 голосов
/ 18 февраля 2019

Из документов: «Индекс TTL не гарантирует, что просроченные данные будут удалены сразу после истечения срока. Может быть задержка между временем истечения срока действия документа и временем, когда MongoDB удаляет документ из базы данных».Смотрите здесь: https://docs.mongodb.com/v4.0/core/index-ttl/#timing-of-the-delete-operation

...