Ich habe eine Sammlung von Dokumenten in mongodb, wobei die expireAfterSeconds
-Eigenschaft auf einen Date-Type-Index gesetzt ist.
Aus Gründen der Argumentation werden die Dokumente nach einer Stunde ablaufen.
Wenn ich ein Dokument in dieser Sammlung aktualisiere, welche der folgenden Situationen wird eintreten?
a) Das Dokument wird eine Stunde nach der ursprünglichen -Erstellungszeit ablaufen.
b) Das Dokument läuft eine Stunde nach der Aktualisierung ab.
c) Das Dokument wird eine Stunde nach der Zeit der indexierten Variablen ablaufen, was auch immer das sein mag.
d) Keine der oben genannten
Ich denke, dass es c ist, aber ich kann den Verweis nicht finden, um es zu bestätigen. Hab ich recht? Wo ist das dokumentiert?
[edit]: Zur Klarstellung: Ich speichere Codes zum Zurücksetzen von Kennwörtern (die ablaufen sollten) und möchte, dass die alten Codes nicht mehr funktionieren, wenn ein neuer Code angefordert wird. Es ist jedoch nicht sehr relevant, da ich sicherstellen kann, dass das gewünschte Verhalten immer respektiert wird, indem einfach die alte Transaktion gelöscht wird. Bei dieser Frage geht es nicht um mein aktuelles Problem, sondern um Mongos Verhalten.
Die richtige Antwort lautet c)
Die Eigenschaft expireAfterSeconds erfordert immer einen Index für ein Feld, das ein BSON-Datum enthält, da der Inhalt dieses Datumsfelds zum Auswählen von Einträgen zum Entfernen verwendet wird.
Wenn Sie möchten, dass eine Aktualisierung eines Dokuments die Lebenszeit zurücksetzt, aktualisieren Sie auch das indizierte Datumsfeld auf die aktuelle Uhrzeit.
Wenn Sie möchten, dass ein Update die TTL nicht beeinflusst, aktualisieren Sie das Datum einfach nicht.
Beachten Sie jedoch, dass expireAfterSeconds nicht garantiert, dass das Dokument sofort gelöscht wird. Die Löschungen werden von einem Hintergrundjob ausgeführt, der jede Minute ausgeführt wird. Dieser Job hat eine niedrige Priorität und kann von MongoDB verschoben werden, wenn die aktuelle Auslastung hoch ist. Wenn es für Ihren Anwendungsfall wichtig ist, dass die Ablaufzeiten genau eingehalten werden, sollten Sie eine zusätzliche Überprüfung der Anwendungsebene hinzufügen.
Diese Funktion wird dokumentiert hier: Ссылка
Wenn Sie nicht auf den Mongo-Demon-Prozess zum Verfallsdatum der Sammlung angewiesen sind, erstellen Sie am besten ein zusätzliches createdOn-Feld bei der Sammlung und vergleichen Sie es mit dem aktuellen Zeitstempel, um zu entscheiden, ob dieses Dokument verwendet werden soll oder nicht.
>