sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose Pre-Save Hook se spouští, ale neukládá další pole (NEPOUŽÍVÁTE model.update)

Přicházíte o this kontext zde,

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

kde říkáte:

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

ve skutečnosti odkazuje na funkci zpětného volání dotazu findOne, takže skončíte se správným console.log a vloženými nesprávnými daty.

můžete si zapamatovat tento kontext háčku před uložením a později aktualizovat číslo pomocí tohoto kontextu uvnitř zpětného volání. jako níže:

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



  1. jak odstranit konkrétní objekt z objektu pole v MongoDB

  2. Porovnejte datum (moment.js) v MongoDB

  3. Mongodb agreguje tři kolekce

  4. mongoDB agregované vyhledávání na vnořeném poli objektů