Saltar al contenido

agregue los campos created_at y updated_at a los esquemas de mongoose

Francisco, miembro de nuestro staff, nos ha hecho el favor de escribir esta sección porque controla perfectamente este tema.

Solución:

ACTUALIZAR: (5 años después)

Nota: Si decide utilizar Kappa Architecture (Abastecimiento de eventos + CQRS), entonces no necesita una fecha actualizada en absoluto. Dado que sus datos son un registro de eventos inmutable y solo anexado, solo necesita la fecha de creación del evento. Similar a Arquitectura lambda, descrito abajo. 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, usará 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 mal entendida) en los sistemas de microservicios.

ACTUALIZAR: (4 años después)

Si utiliza ObjectId como tu _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 del _id campo. Si necesita usar ID de un sistema externo, consulte 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 mongoose >= 4.0.

let ItemSchema = new Schema(
  name:  type: String, required: true, trim: true 
,

  timestamps: true
);

Si se establecen marcas de tiempo, mangosta asigna createdAt y updatedAt campos a su esquema, el tipo asignado es Date.

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 aconsejo que trabaje con datos inmutables de solo adición (arquitectura lambda). Lo que esto significa es que solo permite inserciones. ¡No se deben permitir actualizaciones ni eliminaciones! Si desea “eliminar” un registro, puede insertar fácilmente una nueva versión del documento con algunos timestamp/version
archivado y luego establecer un deleted campo a true. De manera similar, 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 tiene la marca de tiempo más reciente o la versión más alta que es no “borrado” (el deleted el campo no está definido o false`).

La inmutabilidad de los datos garantiza que sus datos se puedan depurar: puede rastrear el historial de cada documento. También puede retroceder a la versión anterior de un documento si algo sale mal. Si vas con tal arquitectura ObjectId.getTimestamp() es todo lo que necesita, y no depende de Mongoose.


RESPUESTA ORIGINALES:

Si está utilizando ObjectId como su campo de identidad, no necesita created_at campo. ObjectIds tienen un método llamado getTimestamp().

ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()

Esto devolverá la siguiente salida:

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

Más información aquí ¿Cómo extraigo la fecha de creación de un ObjectID de Mongo?

Para agregar updated_at archivado necesitas 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();
);

A partir de Mongoose 4.0, ahora puede configurar una opción de marcas de tiempo en el Esquema para que Mongoose maneje esto por usted:

var thingSchema = new Schema(..,  timestamps: true );

Puede cambiar el nombre de los campos utilizados así:

var thingSchema = new Schema(..,  timestamps:  createdAt: 'created_at'  );

http://mongoosejs.com/docs/guide.html#marcas de tiempo

Esto es lo que terminé haciendo:

var ItemSchema = new Schema(
    name    :  type: String, required: true, trim: true 
  , created_at    :  type: Date 
  , updated_at    :  type: Date 
);


ItemSchema.pre('save', function(next)
  now = new Date();
  this.updated_at = now;
  if ( !this.created_at ) 
    this.created_at = now;
  
  next();
);

valoraciones y reseñas

Si estás contento con lo expuesto, tienes la libertad de dejar un post acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *