ACTUALIZACIÓN: (5 años después)
Nota: Si decide usar Kappa Architecture ( Event Sourcing + CQRS ), entonces no necesita una fecha actualizada. Dado que sus datos son un registro de eventos inmutable y de solo agregado, solo necesita la fecha de creación del evento. Similar a la arquitectura Lambda , que se describe a continuación. Entonces, el estado de su aplicación es una proyección del registro de eventos (datos derivados). Si recibe un evento posterior sobre una entidad existente, utilizará la fecha de creación de ese evento como fecha actualizada para su entidad. Esta es una práctica comúnmente utilizada (y comúnmente incomprendida) en sistemas de microservicios.
ACTUALIZACIÓN: (4 años después)
Si lo usa ObjectId
como su _id
campo (que suele ser el caso), entonces todo lo que necesita hacer es:
let document = {
updatedAt: new Date(),
}
Verifique mi respuesta original a continuación sobre cómo obtener la marca de tiempo creada desde el _id
campo. Si necesita usar ID de un sistema externo, verifique la respuesta de Roman Rhrn Nesterov.
ACTUALIZAR: (2.5 años después)
Ahora puede usar la opción # timestamps con la versión de mangosta> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Si establece marcas de tiempo, asignaciones de mangosta createdAt
y updatedAt
campos en su esquema, el tipo asignado esDate
.
También puede especificar los nombres de los archivos de marca de tiempo:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Nota: Si está trabajando en una aplicación grande con datos críticos, debería reconsiderar la actualización de sus documentos. Le aconsejaría que trabaje con datos inmutables, solo anexados ( arquitectura lambda ). Lo que esto significa es que solo se permiten inserciones. ¡Las actualizaciones y eliminaciones no deberían permitirse! Si desea "eliminar" un registro, puede insertar fácilmente una nueva versión del documento con algunos timestamp
/ version
archivados y luego establecer un campo indefinido o falso ').deleted
campo en true
. Del mismo modo, si desea actualizar un documento, cree uno nuevo con los campos apropiados actualizados y el resto de los campos copiados. Luego, para consultar este documento, obtendrá el que tenga la marca de tiempo más nueva o la versión más alta que sea no "borrado" (eldeleted
La inmutabilidad de los datos garantiza que sus datos sean depurables: puede rastrear el historial de cada documento. También puede retroceder a la versión anterior de un documento si algo sale mal. Si utiliza una arquitectura de este tipo, ObjectId.getTimestamp()
es todo lo que necesita y no depende de Mongoose.
RESPUESTA ORIGINAL:
Si está utilizando ObjectId como su campo de identidad, no necesita el created_at
campo. Los ObjectIds tienen un método llamado getTimestamp()
.
ObjectId ("507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Esto devolverá el siguiente resultado:
ISODate ("2012-10-15T21: 26: 17Z")
Más información aquí ¿Cómo extraigo la fecha de creación de un Object ID de Mongo?
Para agregar updated_at
archivado, debe usar esto:
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();
});