sql >> Databasteknik >  >> NoSQL >> MongoDB

lägg till fälten create_at och updated_at till mongoose-scheman

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 en raderad fältet till true . 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" (den borttagna 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();
});


  1. Genomsnittliga aggregationsfrågor i Meteor

  2. Azure Table vs MongoDB på Azure

  3. hur man importerar en .csv-datafil till Redis-databasen

  4. Kommunikation mellan två Docker-behållare på macOS 10.12