AKTUALIZACJA: (5 lat później)
Uwaga: Jeśli zdecydujesz się użyć Kappa Architecture (Pozyskiwanie zdarzeń + CQRS ), wtedy w ogóle nie potrzebujesz zaktualizowanej daty. Ponieważ Twoje dane są niezmiennym dziennikiem zdarzeń tylko do dołączania, potrzebujesz tylko daty utworzenia zdarzenia. Podobny do Architektury Lambda , Opisane poniżej. Wtedy stan aplikacji jest projekcją dziennika zdarzeń (dane pochodne). Jeśli otrzymasz kolejne zdarzenie dotyczące istniejącego podmiotu, użyjesz daty utworzenia tego zdarzenia jako zaktualizowanej daty dla swojego podmiotu. Jest to powszechnie stosowana (i często błędnie rozumiana) praktyka w systemach micelarnych.
AKTUALIZACJA: (4 lata później)
Jeśli używasz ObjectId
jako Twój _id
(co zwykle ma miejsce), wystarczy:
let document = {
updatedAt: new Date(),
}
Sprawdź moją oryginalną odpowiedź poniżej, jak uzyskać utworzony znacznik czasu z _id
field.Jeśli potrzebujesz identyfikatorów z systemu zewnętrznego, sprawdź odpowiedź Romana Rhrna Nesterova.
AKTUALIZACJA: (2,5 roku później)
Możesz teraz użyć opcji #timestamps w wersji z mangustą>=4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Jeśli ustawione są znaczniki czasu, mangusta przypisuje createdAt
i updatedAt
pola do schematu, przypisany typ to Date
.
Możesz także określić nazwy plików sygnatur czasowych:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Uwaga: Jeśli pracujesz nad dużą aplikacją z krytycznymi danymi, powinieneś ponownie rozważyć aktualizację swoich dokumentów. Radziłbym pracować z niezmiennymi danymi, które mogą być tylko dołączane (architektura lambda). Oznacza to, że zawsze zezwalasz tylko na wstawki. Aktualizacje i usuwanie nie powinny być dozwolone! Jeśli chcesz "usunąć" rekord, możesz łatwo wstawić nową wersję dokumentu z jakimś timestamp
/version
złożony, a następnie ustaw deleted
pole na true
. Podobnie, jeśli chcesz zaktualizować dokument – tworzysz nowy z odpowiednimi zaktualizowanymi polami i skopiowaniem pozostałych pól. Następnie, aby przeszukać ten dokument, otrzymasz ten z najnowszym znacznikiem czasu lub najwyższą wersją, która nie jest „usunięta” (deleted
pole jest niezdefiniowane lub fałszywe`).
Niezmienność danych zapewnia możliwość debugowania danych – możesz prześledzić historię każdego dokumentu. Możesz także przywrócić poprzednią wersję dokumentu, jeśli coś pójdzie nie tak. Jeśli pójdziesz z taką anarchitekturą ObjectId.getTimestamp()
to wszystko, czego potrzebujesz i nie jest zależne od Mongoose.
PIERWOTNA ODPOWIEDŹ:
Jeśli używasz ObjectId jako pola tożsamości, nie potrzebujesz created_at
pole. ObjectIds mają metodę o nazwie getTimestamp()
.
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Spowoduje to zwrócenie następujących danych wyjściowych:
ISODate("2012-10-15T21:26:17Z")
Więcej informacji tutaj Jak wyodrębnić datę utworzenia z identyfikatora obiektu Mongo
Aby dodać updated_at
złożony, musisz użyć tego:
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();
});