mongoose更新MongoDB中的字段无法正常工作

时间:2011-11-21 21:27:59

标签: mongodb node.js mongoose

我有这段代码

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和points包含一个 值,但我的用户仍然保持零点。控制台打印 “更新成功”。

我做错了什么?抱歉愚蠢/ noob问题。

Masiar

2 个答案:

答案 0 :(得分:11)

看来你正在做一些不标准的事情:

  • 如果您只想加载一个用户
  • ,请使用findOne代替find
  • 应该调用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); }
  });
});

答案 1 :(得分:0)

关注我的代码人

 User.update({ username: "faibaa" },
    { $inc: { point: 200000 } }, function(err,data){
        return res.send(data);
    });
相关问题