sql >> Database >  >> NoSQL >> MongoDB

voeg de velden created_at en updated_at toe aan mangoestschema's

UPDATE: (5 jaar later)

Opmerking: Als u besluit Kappa Architecture te gebruiken (Event Sourcing + CQRS ), dan heeft u helemaal geen bijgewerkte datum nodig. Aangezien uw gegevens een onveranderlijk gebeurtenislogboek zijn dat alleen kan worden toegevoegd, heeft u alleen de aanmaakdatum van de gebeurtenis nodig. Vergelijkbaar met de Lambda-architectuur , hieronder omschreven. Dan is uw toepassingsstatus een projectie van het gebeurtenislogboek (afgeleide gegevens). Als je een volgende gebeurtenis over een bestaande entiteit ontvangt, gebruik je de aanmaakdatum van die gebeurtenis als bijgewerkte datum voor je entiteit. Dit is een veelgebruikte (en vaak verkeerd begrepen) praktijk in miceroservicesystemen.

UPDATE: (4 jaar later)

Als u ObjectId . gebruikt als uw _id veld (wat meestal het geval is), hoeft u alleen maar:

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

Bekijk mijn oorspronkelijke antwoord hieronder over hoe je de gemaakte tijdstempel kunt krijgen van de _id field.Als je ID's van een extern systeem moet gebruiken, controleer dan het antwoord van Roman Rhrn Nesterov.

UPDATE: (2,5 jaar later)

U kunt nu de #timestamps-optie gebruiken met mangoestversie>=4.0.

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

Als er tijdstempels zijn ingesteld, wijst mangoest createdAt . toe en updatedAt velden toe aan uw schema, is het toegewezen type Date .

U kunt ook de namen van de tijdstempels specificeren:

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

Opmerking: Als u werkt aan een grote applicatie met kritieke gegevens, moet u opnieuw overwegen om uw documenten bij te werken. Ik zou je aanraden om te werken met onveranderlijke, append-only data (lambda-architectuur). Dit betekent dat u alleen inserts toestaat. Updates en verwijderingen mogen niet worden toegestaan! Als u een record wilt "verwijderen", kunt u eenvoudig een nieuwe versie van het document invoegen met een timestamp /version gearchiveerd en vervolgens een deleted veld naar true . Evenzo, als u een document wilt bijwerken, maakt u een nieuwe met de juiste velden bijgewerkt en de rest van de velden gekopieerd. Om dit document vervolgens op te vragen, krijgt u degene met de nieuwste tijdstempel of de hoogste versie die niet is "verwijderd" (de deleted veld is niet gedefinieerd of onwaar`).

Onveranderlijkheid van gegevens zorgt ervoor dat uw gegevens debuggen - u kunt de geschiedenis van elk document traceren. U kunt ook teruggaan naar de vorige versie van een document als er iets misgaat. Als je met zo'n architectuur gaat ObjectId.getTimestamp() is alles wat je nodig hebt, en het is niet afhankelijk van mangoesten.

ORIGINEEL ANTWOORD:

Als u ObjectId als uw identiteitsveld gebruikt, heeft u created_at niet nodig veld. ObjectIds hebben een methode genaamd getTimestamp() .

ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()

Dit levert de volgende uitvoer op:

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

Meer info hier Hoe haal ik de aanmaakdatum uit een Mongo ObjectID

Om updated_at . toe te voegen ingediend, moet je dit gebruiken:

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. Gefeliciteerd met je verjaardag Apache HBase! 10 jaar veerkracht, stabiliteit en prestaties

  2. Buitenlandse sleutels in Mongo?

  3. MongoDB 4.2 Beheer &Monitoring Zonder Vendor Lockin

  4. Redis is leeg na het opstarten, hoewel er een .rdb-bestand is