UPPDATERING: (5 år senare)
Obs! Om du bestämmer dig för att använda Kappa Architecture (Event Sourcing + CQRS ), då behöver du inte uppdaterat datum alls. Eftersom din data är en oföränderlig händelselogg som endast kan läggas till, behöver du bara skapa datum för händelsen. Liknar Lambda-arkitekturen , beskrivet nedan. Då är ditt applikationstillstånd en projektion av händelseloggen (härledd data). Om du får en efterföljande händelse om befintlig enhet, kommer du att använda den händelsens skapade datum som uppdaterat datum för din enhet. Detta är en vanlig (och ofta missförstådd) praxis i miceroservice-system.
UPPDATERING: (4 år senare)
Om du använder ObjectId
som ditt _id
fältet (vilket vanligtvis är fallet), då är allt du behöver göra:
let document = {
updatedAt: new Date(),
}
Kontrollera mitt ursprungliga svar nedan om hur du får den skapade tidsstämpeln från _id
fält. Om du behöver använda ID:n från externa system, kontrollera då Roman Rhrn Nesterovs svar.
UPPDATERING: (2,5 år senare)
Du kan nu använda #timestamps alternativet med mongoose version>=4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Om tidsstämplar ställs in, tilldelar mongoose createdAt
och updatedAt
fält till ditt schema är den tilldelade typen Datum
.
Du kan också ange tidsstämpelfilens namn:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Obs! Om du arbetar med en stor applikation med kritisk data bör du överväga att uppdatera dina dokument. Jag skulle råda dig att arbeta med oföränderlig, endast tilläggsdata (lambda-arkitektur). Vad detta betyder är att du alltid bara tillåter insatser. Uppdateringar och borttagningar bör inte tillåtas! Om du vill "radera" en post kan du enkelt infoga en ny version av dokumentet med någon
tidsstämpel
/version
arkiveras och ställ sedan in enraderad
fältet tilltrue
. På liknande sätt om du vill uppdatera ett dokument – skapar du ett nytt med lämpliga fält uppdaterade och resten av fälten kopieras över. För att sedan fråga det här dokumentet skulle du få det med den senaste tidsstämpeln eller den högsta versionen som inte är "raderad" (denborttagna fältet är odefinierat eller falskt`).Data oföränderlighet säkerställer att din data är felsökningsbar – du kan spåra historien för varje dokument. Du kan också återställa till tidigare version av ett dokument om något går fel. Om du använder en sådan arkitektur
ObjectId.getTimestamp()
är allt du behöver, och det är inte Mongoose-beroende.
ORIGINAL SVAR:
Om du använder ObjectId som ditt identitetsfält behöver du inte created_at
fält. ObjectIds har en metod som heter getTimestamp()
.
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Detta kommer att returnera följande utdata:
ISODate("2012-10-15T21:26:17Z")
Mer info här Hur extraherar jag det skapade datumet från ett Mongo ObjectID
För att lägga till updated_at
arkiverat måste du använda detta:
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();
});