sql >> Base de Datos >  >> NoSQL >> MongoDB

agregue los campos created_at y updated_at a los esquemas de mongoose

ACTUALIZACIÓN: (5 años después)

Nota: Si decide utilizar la Arquitectura Kappa (Event Sourcing + 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 la 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.

ACTUALIZACIÓN: (4 años después)

Si usa ObjectId como su _id (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.

ACTUALIZACIÓN: (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, mongoose 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 alguna 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 recuperar este documento, obtendrá el que tiene la marca de tiempo más reciente o la versión más alta que no está "eliminada". (el deleted el campo no está definido o es falso`).

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 opta por 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 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 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();
});