2016-05-25 12 views
0

Ich habe gerade angefangen, Mongodb zu verwenden. Stecken geblieben.automatische Löschung von Dokumenten in mongodb

So habe ich eine Sammlung mit Feldern:

_id
startdate (long)
endDate (long)
Name

Jetzt möchte ich auf die Dokumente automatisch löschen, die älter als ein bestimmtes Datum.
Ich erstellte einen TTL-Index für startDate Feld, legen Sie die Ablaufzeit nach 2 Minuten und getestet, ob es abläuft. Beim Einfügen eines Dokuments mit startDate als isoDate hat es funktioniert und ist abgelaufen.

..insert({startDate:newDate()})--> Got deleted after 2 secs. 

Meine Frage ist, was auch immer Daten zuvor installiert wurden haben StartDate als lange Wert. Wie wird das funktionieren?

Antwort

0

TTL-Indizes funktionieren nur unter isoDate s. Führen Sie ein Update aus, um Ihre Longs in isoDates zu konvertieren, oder entfernen Sie sie einfach manuell (vermutlich wird alles, was lang ist, älter als Ihr Cutoff sein, oder wird es bald sein).

+0

Danke Paul! Scheint, dass ich Dokumente löschen muss, die auf ihrem Erstellungsdatum basieren, nicht dem Startdatum Wert. Ich habe creationDate auch nicht als separates Feld. Ich verstehe, dass ich Timestamp von ObjectId bekommen kann, wenn ich das Datum des Dokumentes erhalten möchte. Aber die Dokumentation erwähnt, dass wir keine TTL-Indizes für _id erstellen können. Habe ich recht? Irgendein Vorschlag? – Rthp

+0

Wenn Sie kein solches Feld haben, fügen Sie es hinzu! Aktualisieren Sie Ihre Dokumente, um ein create_date-Feld mit dem Zeitstempel aus der ObjectId hinzuzufügen (ich habe diese Funktion noch nie benutzt, aber es macht Sinn), dann TTL-Index auf create_date. – PaulMcG

Verwandte Themen