ОНОВЛЕННЯ: (5 років потому)
Примітка. Якщо ви вирішили використовувати Kappa Architecture ( події Sourcing + CQRS ), то вам зовсім не потрібна оновлена дата. Оскільки ваші дані - це непорушний журнал подій, що додається, вам потрібна лише дата створення створеної події. Схожа на архітектуру лямбда , описану нижче. Тоді стан вашої програми - це проекція журналу подій (отримані дані). Якщо ви отримаєте наступну подію про існуючу сутність, ви використовуєте дату створення цієї події як оновлену дату для вашої організації. Це загальноприйнята (і зазвичай неправильно зрозуміла) практика в системах міцеросервісу.
ОНОВЛЕННЯ: (4 роки пізніше)
Якщо ви використовуєте ObjectId
як своє _id
поле (що зазвичай буває), то все, що вам потрібно зробити, це:
let document = {
updatedAt: new Date(),
}
Перегляньте мою оригінальну відповідь нижче про те, як отримати створену часову позначку з _id
поля. Якщо вам потрібно використовувати ідентифікатори із зовнішньої системи, перевірте відповідь Романа Ррн Нестерова.
ОНОВЛЕННЯ: (через 2,5 роки)
Тепер ви можете використовувати опцію #timestamps з версією мангуста> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Якщо вашій схемі встановлено часові позначки, мангуст призначає createdAt
та updatedAt
поля, присвоюється тип Date
.
Ви також можете вказати імена файлів часу:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Примітка. Якщо ви працюєте над великою програмою з критичними даними, вам слід переглянути питання оновлення документів. Я б радив вам працювати з незмінними, доданими лише даними ( архітектура лямбда ). Це означає, що ви дозволяєте лише вставляти. Не можна допускати оновлення та видалення! Якщо ви хочете "видалити" запис, ви можете легко вставити нову версію документа з деяким timestamp
/ version
поданим файлом, а потім встановити deleted
поле true
. Аналогічно, якщо ви хочете оновити документ - ви створюєте новий з відповідними оновленими полями, а решта полів копіюються. Потім для запиту цього документа ви отримаєте той, який має нову часову позначку або найвищу версію, яка є не "видалено" (thedeleted
поле не визначене або помилкове`).
Незмінність даних гарантує налагодження ваших даних - ви можете простежити історію кожного документа. Ви також можете повернути до попередньої версії документа, якщо щось піде не так. Якщо ви їдете з такою архітектурою ObjectId.getTimestamp()
- це все, що вам потрібно, і це не залежить від мангуста.
ОРИГІНАЛЬНИЙ ВІДПОВІДЬ:
Якщо ви використовуєте ObjectId як своє поле ідентичності, вам це created_at
поле не потрібно . ObjectIds має метод, який називається getTimestamp()
.
ObjectId ("507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Це поверне такий результат:
ISODate ("2012-10-15T21: 26: 17Z")
Більше інформації тут Як витягти створену дату з Obgo ID Mongo
Для того, щоб додати 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();
});