MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

добавяне на полета created_at и updated_at към схемите на mongoose

АКТУАЛИЗИРАНЕ: (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();
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB atomic findOrCreate:findOne, вмъкнете, ако не съществува, но не актуализирайте

  2. Закръгляване до 2 знака след десетичната запетая с помощта на рамката за агрегиране на MongoDB

  3. Как да направя заявка за агрегиране на Mongo в Spring Data?

  4. Mongoose.js:Намерете потребител по потребителско име LIKE value

  5. Няма достъп до свойството на обекта на отговора на Mongoose