mongoose:find,修改,保存

我有一个mongooseUser模型:

 var User = mongoose.model('Users', mongoose.Schema({ username: 'string', password: 'string', rights: 'string' }) ); 

我想findUser模型的一个实例,修改它的属性,并保存更改。 这是我试过的(这是错的!):

 User.find({username: oldUsername}, function (err, user) { user.username = newUser.username; user.password = newUser.password; user.rights = newUser.rights; user.save(function (err) { if(err) { console.error('ERROR!'); } }); }); 

什么是查找,修改和保存User模型的实例的语法?

为什么不使用Model.update ? 毕竟,您不是使用find的用户来更新其属性:

 User.update({username: oldUsername}, { username: newUser.username, password: newUser.password, rights: newUser.rights }, function(err, numberAffected, rawResponse) { //handle it }) 

您的callback的user参数是一个数组与find 。 查询单个实例时使用findOne而不是find

 User.findOne({username: oldUsername}, function (err, user) { user.username = newUser.username; user.password = newUser.password; user.rights = newUser.rights; user.save(function (err) { if(err) { console.error('ERROR!'); } }); }); 

如果你想使用find ,就像我想要在客户端进行任何validation。

find返回一个ARRAY对象

findOne只返回一个对象

添加user = user[0]使保存方法为我工作。

这是你放的地方。

 User.find({username: oldUsername}, function (err, user) { user = user[0]; user.username = newUser.username; user.password = newUser.password; user.rights = newUser.rights; user.save(function (err) { if(err) { console.error('ERROR!'); } }); });