MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose Pre-Save Hook se déclenche, mais n'enregistre pas de champ supplémentaire (NE PAS utiliser model.update)

Vous manquez le this contexte ici,

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

où vous dites :

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

fait en fait référence à la fonction de rappel de la requête findOne, vous vous retrouvez donc avec le bon fichier console.log et de mauvaises données insérées.

vous pouvez vous souvenir de ce contexte du crochet de pré-sauvegarde et mettre à jour ultérieurement le numéro en utilisant ce contexte dans le rappel. comme ci-dessous :

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