Bạn đang bỏ lỡ this
ngữ cảnh ở đây,
.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();
});
})
nơi bạn nói:
this.number = doc.numberSeq;
console.log(this.number);
thực sự đề cập đến chức năng gọi lại của truy vấn findOne, do đó bạn đang kết thúc với đúng console.log và dữ liệu được chèn sai.
bạn có thể nhớ ngữ cảnh này của móc lưu trước và sau đó cập nhật số bằng cách sử dụng ngữ cảnh đó bên trong lệnh gọi lại. như bên dưới:
.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();
});
})