TTL-Index anlegen, Ablaufzeit ändern und TTL-Löschungen überwachen
MongoDBWartungBefehl
// 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.ttlWas es tut
Legt einen TTL-Index an, der Dokumente eine festgelegte Zeit nach einem Datumsfeld automatisch löscht, ändert die Ablaufzeit mit collMod ohne Rebuild und zeigt, wie viele Dokumente der TTL-Monitor gelöscht hat.
Wann einsetzen
Um zeitgebundene Daten wie Sessions, Logs oder temporäre Tokens ohne Lösch-Job in der Anwendung zu bereinigen und um zu untersuchen, warum eine wachsende Collection nicht schrumpft.
Vorsicht
Der TTL-Monitor läuft standardmäßig alle 60 Sekunden; das Löschen erfolgt nicht sofort. Das Feld muss vom Typ Date (oder ein Array von Dates) sein; Datumsangaben als String oder Dokumente ohne das Feld werden nie gelöscht. Eine verkürzte Ablaufzeit führt dazu, dass viele Dokumente auf einmal gelöscht werden, mit Schreiblast und Replikationsverzögerung. Löschungen erfolgen nur auf dem Primary und werden ins Oplog geschrieben.