MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongoose Pre-Save Hook се активира, но не запазва допълнително поле (НЕ използва model.update)

Пропускате this контекст тук,

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

където казвате:

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

всъщност се отнася до функцията за обратно извикване на заявката findOne, така че завършвате с правилния console.log и вмъкнати грешни данни.

можете да запомните този контекст на куката за предварително запазване и по-късно да актуализирате номера, като използвате този контекст в обратното извикване. като по-долу:

.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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Услугата Mongo се срина. Трябва да се намери причината за срива

  2. bson.D срещу bson.M за заявки за намиране

  3. mongoose :намерете данни чрез цикъл върху масив от модели

  4. MongoDB $setDifference

  5. Опции за конфигурация по време на изпълнение на ClusterControl