Создание TTL-индекса, изменение срока хранения и мониторинг удалений TTL
MongoDBОбслуживаниеКоманда
// Automatically delete documents lastSeen + 3600 s later:
db.oturum.createIndex({ lastSeen: 1 }, { expireAfterSeconds: 3600, name: "ttl_lastSeen" })
// Change the expiry without rebuilding the index:
db.runCommand({ collMod: "oturum", index: { name: "ttl_lastSeen", expireAfterSeconds: 7200 } })
// TTL indexes on the collection and their expiry:
db.oturum.getIndexes().filter(i => i.expireAfterSeconds !== undefined)
// TTL monitor statistics (deleted documents, passes):
db.serverStatus().metrics.ttlЧто делает
Создаёт TTL-индекс, автоматически удаляющий документы через заданное время после значения поля даты, меняет срок через collMod без перестроения и показывает, сколько документов удалил TTL-монитор.
Когда использовать
Чтобы очищать данные с ограниченным сроком жизни, такие как сессии, журналы или временные токены, без задания удаления в приложении, и чтобы выяснить, почему растущая коллекция не уменьшается.
Внимание
TTL-монитор по умолчанию запускается каждые 60 секунд; удаление не мгновенное. Поле должно иметь тип Date (или быть массивом Date); даты в виде строк или документы без поля никогда не удаляются. Сокращение срока приводит к удалению множества документов сразу, нагрузке на запись и отставанию репликации. Удаления выполняются только на primary и пишутся в oplog.