MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose Pre-Save Hook feuert, speichert aber kein zusätzliches Feld (nicht mit model.update)

Sie verpassen this Kontext hier,

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

wo Sie sagen:

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

bezieht sich tatsächlich auf die Callback-Funktion der findOne-Abfrage, daher erhalten Sie am Ende die richtige console.log und falsche Daten eingefügt.

Sie können sich diesen Kontext des Pre-Save-Hooks merken und später die Nummer aktualisieren, indem Sie diesen Kontext innerhalb des Rückrufs verwenden. wie unten:

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