mongoose没有保存模型的变化

我试图用mongoose更新用户文件,但我无法完成。 这是我的用户模型

var UserSchema = new Schema({ email : { type : String, unique : true }, salt : { type : String, required : true }, hash : { type : String, required : true }, account_no : { type : String, required : true, unique : true }, activate_until:{ date:{ type: Date, default: Date.now } }, valid : { type : Boolean, required : false }, reset_token:{ type : String }, reset_until:{ date:{ type: Date, default: Date.now } } }); UserSchema.virtual('password').get(function() { return this._password; }).set(function(password) { this._password = password; var salt = this.salt = bcrypt.genSaltSync(10); this.hash = bcrypt.hashSync(password, salt); this.account_no = generateAccountNo(); this.activate_until=new Date(); this.valid = false; }); 

现在我正在尝试使用以下方法更新用户密码

 resetAccount: function(key,password, callback) { User.findOne({ reset_token : key }, function(err, user) { if(err) { console.error(err); return callback(err); } if(!user) { console.log("not user"); return callback("not user", false); } var salt = user.salt = bcrypt.genSaltSync(10); user.hash = bcrypt.hashSync(password, salt); console.log(user); var upsertData = user.toObject(); // Delete the _id property, otherwise Mongo will return a "Mod on _id not allowed" error delete upsertData._id; console.log( user._id); // Do the upsert, which works like this: If no Contact document exists with // _id = contact.id, then create a new doc using upsertData. // Otherwise, update the existing doc with upsertData User.update({ _id : user._id },{$set:{ salt:salt,hash:user.hash}}, { upsert : false }, function(err) { if(err) { console.error(err); callback(err); } return callback("Password changed", user); }); // this.update({account_no:key}, { $set: { valid: false }},{ upsert: true }, //function(err, user) { // if (err) { console.log(err);return callback(err); } // if (!user) { return callback(null, false); } // console.log(this.email); // return callback(user,true); // // }); }); }, 

有什么我错过了,这使得它不工作?

谢谢,费拉斯