MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O gancho de pré-salvamento do Mongoose está disparando, mas não salvando o campo adicional (NÃO usando model.update)


Você está perdendo this contexto aqui,
.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();
    });
})

onde você diz:
this.number = doc.numberSeq;
console.log(this.number);

na verdade, refere-se à função de retorno de chamada da consulta findOne, portanto, você está terminando com o console.log correto e os dados incorretos inseridos.

você pode lembrar desse contexto do gancho pre save e depois atualizar o número usando esse contexto dentro do retorno de chamada. como abaixo:
.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();
    });
})