UPDATE: (5 lat później)
Uwaga: jeśli zdecydujesz się na korzystanie z architektury Kappa ( źródło zdarzeń + CQRS ), nie potrzebujesz w ogóle zaktualizowanej daty. Ponieważ Twoje dane są niezmiennym dziennikiem zdarzeń, który można tylko dopisać, potrzebujesz tylko daty utworzenia zdarzenia. Podobna do opisanej poniżej architektury lambda . W takim przypadku stan aplikacji jest projekcją dziennika zdarzeń (danych pochodnych). Jeśli otrzymasz kolejne zdarzenie dotyczące istniejącej encji, użyjesz daty utworzenia tego zdarzenia jako zaktualizowanej daty swojej encji. Jest to powszechnie stosowana (i często niezrozumiana) praktyka w systemach mikrousług.
UPDATE: (4 lata później)
Jeśli używasz ObjectId
jako swojego _id
pola (co zwykle ma miejsce), wszystko, co musisz zrobić, to:
let document = {
updatedAt: new Date(),
}
Sprawdź moją oryginalną odpowiedź poniżej, jak uzyskać utworzony znacznik czasu z _id
pola. Jeśli potrzebujesz użyć identyfikatorów z systemu zewnętrznego, sprawdź odpowiedź Romana Rhrna Nesterova.
AKTUALIZACJA: (2,5 roku później)
Możesz teraz użyć opcji #timestamps z wersją mangusty> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Jeśli ustawisz sygnatury czasowe, przypisania mongoose createdAt
i updatedAt
pola do schematu, przypisany typ to Date
.
Możesz także określić nazwy zbioró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ę dokumentów. Radziłbym pracować z niezmiennymi danymi tylko do dołączania ( architektura lambda ). Oznacza to, że zezwalasz tylko na wstawianie. Aktualizacje i usuwanie nie powinny być dozwolone! Jeśli chcesz „usunąć” rekord, możesz łatwo wstawić nową wersję dokumentu z jakimś timestamp
/ version
wypełnionym, a następnie ustawić deleted
pole na true
. Podobnie, jeśli chcesz zaktualizować dokument - tworzysz nowy z zaktualizowanymi odpowiednimi polami i skopiowanymi pozostałymi polami, a następnie, aby odpytać ten dokument, otrzymasz dokument z najnowszym znacznikiem czasu lub najwyższą wersją, która jest nie „usunięte” (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 wybierzesz taką architekturę, ObjectId.getTimestamp()
to wszystko, czego potrzebujesz, i nie jest ona zależna od Mongoose.
ORYGINALNA ODPOWIEDŹ:
Jeśli używasz ObjectId jako pola tożsamości, nie potrzebujesz created_at
pola. ObjectIds mają metodę o nazwie getTimestamp()
.
ObjectId ("507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
To zwróci następujące dane wyjściowe:
ISODate („2012-10-15T21: 26: 17Z”)
Więcej informacji tutaj Jak wyodrębnić datę utworzenia z Mongo ObjectID
Aby dodać pole updated_at
, 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();
});