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é nastavtedeleted
pole natrue
. 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();
});