АКТУАЛИЗИРАНЕ: (5 години по-късно)
Забележка: Ако решите да използвате Kappa Architecture (Event Sourcing + CQRS ), тогава изобщо не се нуждаете от актуализирана дата. Тъй като вашите данни са неизменяем дневник на събития само за добавяне, винаги се нуждаете само от дата на създаване на събитие. Подобно на Lambda Architecture , описано по-долу. Тогава състоянието на вашето приложение е проекция на регистъра на събитията (извлечени данни). Ако получите последващо събитие за съществуващ обект, тогава ще използвате датата на създаване на това събитие като актуализирана дата за вашия обект. Това е често използвана (и често неразбрана) практика в системите за мицеросервис.
АКТУАЛИЗИРАНЕ: (4 години по-късно)
Ако използвате ObjectId
като вашия _id
поле (което обикновено е така), тогава всичко, което трябва да направите, е:
let document = {
updatedAt: new Date(),
}
Проверете оригиналния ми отговор по-долу за това как да получите създадената времева марка от _id
поле. Ако трябва да използвате идентификатори от външна система, проверете отговора на Роман Рхрн Нестеров.
АКТУАЛИЗИРАНЕ: (2,5 години по-късно)
Вече можете да използвате опцията #timestamps с версия на mongoose>=4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Ако са зададени времеви марки, mongoose присвоява createdAt
и updatedAt
полета към вашата схема, присвоения тип е Date
.
Можете също да посочите имената на файловете с времеви печати:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Забележка: Ако работите върху голямо приложение с критични данни, трябва да преосмислите актуализирането на вашите документи. Бих ви посъветвал да работите с неизменни данни само за добавяне (ламбда архитектура). Това означава, че винаги разрешавате само вмъквания. Актуализациите и изтриванията не трябва да се допускат! Ако искате да „изтриете“ запис, можете лесно да вмъкнете нова версия на документа с някакъв
timestamp
/version
подадени и след това задайтеdeleted
поле наtrue
. По същия начин, ако искате да актуализирате документ – създавате нов с актуализирани съответните полета и копирани останалите полета. След това, за да направите заявка за този документ, ще получите този с най-новото времеви печат или най-високата версия, която не е „изтрита“ (deleted
полето е недефинирано или false`).Неизменността на данните гарантира, че вашите данни могат да бъдат отстранени – можете да проследите историята на всеки документ. Можете също да се върнете към предишна версия на документ, ако нещо се обърка. Ако използвате такава анархитектура
ObjectId.getTimestamp()
е всичко, от което се нуждаете, и не зависи от Mongoose.
ОРИГИНАЛЕН ОТГОВОР:
Ако използвате ObjectId като поле за самоличност, нямате нужда от created_at
поле. ObjectIds имат метод, наречен getTimestamp()
.
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Това ще върне следния изход:
ISODate("2012-10-15T21:26:17Z")
Повече информация тук Как да извлека създадената дата от Mongo ObjectID
За да добавите updated_at
подадено, трябва да използвате това:
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();
});