Você está perdendo
this
contexto aqui, .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();
});
})
onde você diz:
this.number = doc.numberSeq;
console.log(this.number);
na verdade, refere-se à função de retorno de chamada da consulta findOne, portanto, você está terminando com o console.log correto e os dados incorretos inseridos.
você pode lembrar desse contexto do gancho pre save e depois atualizar o número usando esse contexto dentro do retorno de chamada. como abaixo:
.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();
});
})