MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose Pre-Save Hook sta sparando, ma non salva il campo aggiuntivo (NON usando model.update)

Ti stai perdendo il this contesto qui,

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

dove dici:

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

in realtà si riferisce alla funzione di callback della query findOne, quindi ti ritroverai con il giusto console.log e dati inseriti errati.

puoi ricordare questo contesto dell'hook pre-salvataggio e in seguito aggiornare il numero usando quel contesto all'interno della richiamata. come di seguito:

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