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

Mongoose Pre-Save Hook se activa, pero no se guarda un campo adicional (NO se usa model.update)

Te estás perdiendo this contexto aquí,

.pre('save', function(next) {
  Project.findOne({_id: this.project}).select('numberSeq').exec(function(err, doc) {
    if (err) {
      console.log(err);
    }
    console.log('pre-save hook firing');
      this.number = doc.numberSeq;
      console.log(this.number);
      next();
    });
})

donde dices:

this.number = doc.numberSeq;
console.log(this.number);

en realidad se refiere a la función de devolución de llamada de la consulta findOne, por lo que terminará con el archivo console.log correcto y datos incorrectos insertados.

puede recordar este contexto del gancho previo al guardado y luego actualizar el número usando ese contexto dentro de la devolución de llamada. como a continuación:

.pre('save', function(next) {
  var tat=this;
  Project.findOne({_id: this.project}).select('numberSeq').exec(function(err, doc) {
    if (err) {
      console.log(err);
    }
    console.log('pre-save hook firing');
      tat.number = doc.numberSeq;
      console.log(tat.number);
      next();
    });
})