validate update findbyid mongodb mongoose

mongodb - update - ¿Mongoose proporciona acceso al valor anterior de la propiedad en pre(''guardar'')?



mongoose update (3)

Me gustaría comparar el valor nuevo / entrante de una propiedad con el valor anterior de esa propiedad (lo que actualmente se guarda en la base de datos) dentro de un middleware pre(''save'') .

¿Mongoose proporciona una facilidad para hacer esto?


Honestamente, probé las soluciones publicadas aquí, pero tuve que crear una función que almacenara los valores antiguos en una matriz, guardara los valores y luego viera la diferencia.

// Stores all of the old values of the instance into oldValues const oldValues = {}; for (let key of Object.keys(input)) { if (self[key] != undefined) { oldValues[key] = self[key].toString(); } // Saves the input values to the instance self[key] = input[key]; } yield self.save(); for (let key of Object.keys(newValues)) { if (oldValues[key] != newValues[key]) { // Do what you need to do } }


La respuesta aceptada funciona muy bien. También se puede utilizar una sintaxis alternativa, con el definidor en línea con la definición de esquema:

var Person = new mongoose.Schema({ name: { type: String, set: function(name) { this._previousName = this.name; return name; } }); Person.pre(''save'', function (next) { var previousName = this._previousName; if(someCondition) { ... } next(); });


Mongoose le permite configurar configuradores personalizados en los que hace la comparación. pre (''guardar'') por sí solo no le dará lo que necesita, pero juntos:

schema.path(''name'').set(function (newVal) { var originalVal = this.name; if (someThing) { this._customState = true; } }); schema.pre(''save'', function (next) { if (this._customState) { ... } next(); })