sql >> Databáze >  >> NoSQL >> MongoDB

přidejte pole created_at a updated_at do schémat mongoose

AKTUALIZACE: (o 5 let později)

Poznámka: Pokud se rozhodnete použít Kappa Architecture (Sourcing událostí + CQRS ), pak aktualizované datum vůbec nepotřebujete. Vzhledem k tomu, že vaše data jsou neměnným protokolem událostí, který lze pouze připojit, potřebujete vždy pouze datum vytvoření události. Podobné jako Lambda Architecture , popsané níže. Potom je stav vaší aplikace projekcí protokolu událostí (odvozená data). Pokud obdržíte následnou událost o existující entitě, použijete datum vytvoření této události jako aktualizované datum pro vaši entitu. Toto je běžně používaná (a běžně nepochopená) praxe v systémech miceroservice.

AKTUALIZACE: (o 4 roky později)

Pokud použijete ObjectId jako vaše _id pole (což je obvykle případ), pak vše, co musíte udělat, je:

let document = {
  updatedAt: new Date(),
}

Podívejte se na mou původní odpověď níže, jak získat vytvořené časové razítko z _id Pokud potřebujete použít ID z externího systému, zkontrolujte odpověď Romana Rhrna Nesterova.

AKTUALIZACE: (o 2,5 roku později)

Nyní můžete použít možnost #timestamps s mongoose verzí>=4.0.

let ItemSchema = new Schema({
  name: { type: String, required: true, trim: true }
},
{
  timestamps: true
});

Pokud nastavíte časová razítka, mongoose přiřadí createdAt a updatedAt polí do vašeho schématu, přiřazený typ je Date .

Můžete také zadat názvy souborů časových razítek:

timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }

Poznámka: Pokud pracujete na velké aplikaci s kritickými daty, měli byste znovu zvážit aktualizaci svých dokumentů. Doporučil bych vám pracovat s neměnnými daty pouze přidávanými (architektura lambda). To znamená, že povolujete pouze vložky. Aktualizace a mazání by neměly být povoleny! Pokud byste chtěli "smazat" záznam, můžete snadno vložit novou verzi dokumentu s nějakým timestamp /version soubor a poté nastavte deleted pole na true . Podobně, pokud chcete aktualizovat dokument – vytvoříte nový s aktualizovanými příslušnými poli a zkopírováním zbývajících polí. Pak, abyste se na tento dokument dotazovali, získali byste dokument s nejnovějším časovým razítkem nebo nejvyšší verzí, která není „smazána“ (deleted pole je nedefinované nebo nepravdivé`).

Neměnnost dat zajišťuje, že jsou vaše data laditelná – můžete sledovat historii každého dokumentu. Pokud se něco pokazí, můžete se také vrátit k předchozí verzi dokumentu. Pokud použijete takovou anarchitekturu, ObjectId.getTimestamp() je vše, co potřebujete, a není to závislé na Mongoose.

PŮVODNÍ ODPOVĚĎ:

Pokud jako pole identity používáte ObjectId, nepotřebujete created_at pole. ObjectId má metodu nazvanou getTimestamp() .

ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()

To vrátí následující výstup:

ISODate("2012-10-15T21:26:17Z")

Více informací zde Jak extrahuji vytvořené datum z Mongo ObjectID

Chcete-li přidat updated_at musíte použít toto:

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. Rozdíly mezi Microsoft.Extensions.Cashing.Redis a Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache

  2. Jak nastavit limit pro velikost pole ve schématu Mongoose

  3. Jaký je nejlepší způsob ukládání dat v MongoDB?

  4. redis-server v ubuntu14.04:Vázaná adresa se již používá