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

Mongoose Pre-Save Hook affyres, men gemmer ikke yderligere felt (bruger IKKE model.update)

Du går glip af this kontekst her,

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

hvor du siger:

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

refererer faktisk til tilbagekaldsfunktionen i findOne-forespørgslen, så du ender med den rigtige console.log og forkerte data indsat.

du kan huske denne kontekst af pre save hook og senere opdatere nummeret ved at bruge denne kontekst i tilbagekaldet. som nedenfor:

.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. Fejl ved opbygning af Mongodb på ubuntu-server

  2. Meteor ved hjælp af Azure MongoDB

  3. MongoDB $push vs $addToSet:Hvad er forskellen?

  4. Hvad er den bedste praksis for MongoDB-forbindelser på Node.js?