AGGIORNAMENTO: (5 anni dopo)
Nota: se si decide di utilizzare Kappa Architecture ( Event Sourcing + CQRS ), non è necessario aggiornare la data. Dato che i tuoi dati sono un registro eventi immutabile e solo di append, hai sempre e solo bisogno della data di creazione dell'evento. Simile all'architettura Lambda , descritta di seguito. Quindi lo stato dell'applicazione è una proiezione del registro eventi (dati derivati). Se ricevi un evento successivo sull'entità esistente, utilizzerai la data di creazione dell'evento come data aggiornata per la tua entità. Questa è una pratica comunemente usata (e comunemente fraintesa) nei sistemi di microservizio.
AGGIORNAMENTO: (4 anni dopo)
Se usi ObjectId
come _id
campo (che di solito è il caso), allora tutto ciò che devi fare è:
let document = {
updatedAt: new Date(),
}
Controlla la mia risposta originale qui sotto su come ottenere il timestamp creato dal _id
campo. Se devi usare gli ID da un sistema esterno, controlla la risposta di Roman Rhrn Nesterov.
AGGIORNAMENTO: (2,5 anni dopo)
Ora puoi usare l' opzione #timestamps con la versione mongoose> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Se imposta timestamp, assegnazioni di mangusta createdAt
e updatedAt
campi al tuo schema, il tipo assegnato è Date
.
Puoi anche specificare i nomi dei file di data e ora:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Nota: se stai lavorando su una grande applicazione con dati critici, dovresti riconsiderare l'aggiornamento dei tuoi documenti. Ti consiglierei di lavorare con dati immutabili, di sola aggiunta ( architettura lambda ). Ciò significa che permetti solo inserti. Aggiornamenti ed eliminazioni non dovrebbero essere consentiti! Se si desidera "eliminare" un record, è possibile inserire facilmente una nuova versione del documento con alcuni timestamp
/ version
archiviati e quindi impostare un deleted
campo su true
. Allo stesso modo, se si desidera aggiornare un documento, ne si crea uno nuovo con i campi appropriati aggiornati e il resto dei campi copiati. Quindi, per interrogare questo documento, si otterrebbe quello con il timestamp più recente o la versione più alta che è non "cancellato" (ildeleted
campo non definito o falso`).
L'immutabilità dei dati garantisce che i tuoi dati siano debuggabili: puoi tracciare la cronologia di ogni documento. Puoi anche ripristinare la versione precedente di un documento se qualcosa va storto. Se vai con una tale architettura ObjectId.getTimestamp()
è tutto ciò di cui hai bisogno e non dipende da Mongoose.
RISPOSTA ORIGINALE:
Se si utilizza ObjectId come campo identità non è necessario il created_at
campo. Gli ObjectId hanno un metodo chiamato getTimestamp()
.
ObjectId ( "507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Ciò restituirà il seguente output:
Isodate ( "2012-10-15T21: 26: 17Z")
Maggiori informazioni qui Come posso estrarre la data di creazione da un Mongo ObjectID
Per aggiungere l' updated_at
archivio è necessario utilizzare questo:
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();
});