我有这个代码
var UserSchema = new Schema({
Username: {type: String, index: true},
Password: String,
Email: String,
Points: {type: Number, default: 0}
});
[...]
var User = db.model('User');
/*
* Function to save the points in the user's account
*/
function savePoints(name, points){
if(name != "unregistered user"){
User.find({Username: name}, function(err, users){
var oldPoints = users[0].Points;
var newPoints = oldPoints + points;
User.update({name: name}, { $inc: {Points: newPoints}}, function(err){
if(err){
console.log("some error happened when update");
}
else{
console.log("update successfull! with name = " + name);
User.find({Username: name}, function(err, users) {
console.log("updated : " + users[0].Points);
});
}
});
});
}
}
savePoints("Masiar", 666);
我想通过以下方式更新我的用户(通过查找其名称)
更新他/她的观点。我确定 oldPoints 和 point 包含
值,但我的用户仍然处于零点。控制台打印出
“更新成功”。
我究竟做错了什么?抱歉这个愚蠢/菜鸟的问题。
Masiar
看来你做了一些不标准的事情:
- Use
findOne
代替find
如果您只想加载一个用户
- Calling
Model.update
应该更新您尚未加载的记录
-
$inc
正在添加 oldPoints,因此新值将是 2*oldPoints + newPoints
- 您正在使用
name
作为条件查询而不是Username
我会将代码重写为如下所示:
User.findOne({Username: name}, function(err, user){
if (err) { return next(err); }
user.Points += points;
user.save(function(err) {
if (err) { return next(err); }
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)