UPDATE: (5 Jahre später)
Hinweis: Wenn Sie sich für die Verwendung von Kappa Architecture ( Event Sourcing + CQRS ) entscheiden, benötigen Sie überhaupt kein aktualisiertes Datum. Da es sich bei Ihren Daten um ein unveränderliches Ereignisprotokoll handelt, das nur angehängt werden kann, benötigen Sie immer nur das Erstellungsdatum des Ereignisses. Ähnlich der unten beschriebenen Lambda-Architektur . Ihr Anwendungsstatus ist dann eine Projektion des Ereignisprotokolls (abgeleitete Daten). Wenn Sie ein nachfolgendes Ereignis über eine vorhandene Entität erhalten, verwenden Sie das Erstellungsdatum dieses Ereignisses als Aktualisierungsdatum für Ihre Entität. Dies ist eine häufig verwendete (und häufig missverstandene) Praxis in Miceroservice-Systemen.
UPDATE: (4 Jahre später)
Wenn Sie ObjectId
als _id
Feld verwenden (was normalerweise der Fall ist), müssen Sie nur Folgendes tun:
let document = {
updatedAt: new Date(),
}
Überprüfen Sie meine ursprüngliche Antwort unten, wie Sie den erstellten Zeitstempel aus dem _id
Feld erhalten. Wenn Sie IDs von einem externen System verwenden müssen, überprüfen Sie die Antwort von Roman Rhrn Nesterov.
UPDATE: (2,5 Jahre später)
Sie können jetzt die Option #timestamps mit der Mungo-Version> = 4.0 verwenden.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Wenn Sie Ihrem Schema Zeitstempel, Mungos createdAt
und updatedAt
Felder zuweisen, wird der Typ zugewiesen Date
.
Sie können auch die Namen der Zeitstempeldateien angeben:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Hinweis: Wenn Sie an einer großen Anwendung mit kritischen Daten arbeiten, sollten Sie die Aktualisierung Ihrer Dokumente überdenken. Ich würde Ihnen raten, mit unveränderlichen Daten zu arbeiten, die nur Anhänge enthalten ( Lambda-Architektur ). Dies bedeutet, dass Sie immer nur Einsätze zulassen. Aktualisierungen und Löschungen sollten nicht erlaubt sein! Wenn Sie einen Datensatz "löschen" möchten, können Sie einfach eine neue Version des Dokuments mit einigen timestamp
/ version
abgelegt und dann ein deleted
Feld auf setzen true
. Wenn Sie ein Dokument aktualisieren möchten, erstellen Sie ein neues Dokument, wobei die entsprechenden Felder aktualisiert und die restlichen Felder kopiert werden. Um dieses Dokument abzufragen, erhalten Sie das Dokument mit dem neuesten Zeitstempel oder der höchsten Version nicht "gelöscht" (diedeleted
Feld ist undefiniert oder falsch`).
Durch die Unveränderlichkeit der Daten wird sichergestellt, dass Ihre Daten debuggbar sind. Sie können den Verlauf jedes Dokuments verfolgen. Sie können auch ein Rollback auf die vorherige Version eines Dokuments durchführen, wenn ein Fehler auftritt. Wenn Sie sich für eine solche Architektur entscheiden, ObjectId.getTimestamp()
ist dies alles, was Sie brauchen, und sie ist nicht mungoabhängig.
URSPRÜNGLICHE ANTWORT:
Wenn Sie ObjectId als Identitätsfeld verwenden, benötigen Sie kein created_at
Feld. ObjectIds haben eine Methode namens getTimestamp()
.
ObjectId ("507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Dies gibt die folgende Ausgabe zurück:
ISODate ("2012-10-15T21: 26: 17Z")
Weitere Informationen hier Wie extrahiere ich das Erstellungsdatum aus einer Mongo ObjectID
Um Dateien hinzuzufügen updated_at
, müssen Sie Folgendes verwenden:
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});