Мангуста не обновляет поле в MongoDB - PullRequest
6 голосов
/ 22 ноября 2011

У меня есть этот код

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 и точки содержат значение, но мой пользователь продолжает работать с нулевыми точками.Консоль печатает «обновление успешно».

Что я делаю не так?Извините за глупый вопрос.

Масиар

Ответы [ 2 ]

11 голосов
/ 22 ноября 2011

Кажется, вы делаете несколько нестандартных вещей:

  • Используйте 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); }
  });
});
0 голосов
/ 23 августа 2016

следуй моему коду, парень

 User.update({ username: "faibaa" },
    { $inc: { point: 200000 } }, function(err,data){
        return res.send(data);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...