2015-11-14 154 views
0

使用MEAN堆栈,我试图让管理员帐户更新另一个用户的信息,在这种情况下,他们的标题/角色在网站上。我遇到的问题是编辑用户时唯一可用的功能是save()函数。这可能是我可以利用更新功能,如果是这样的话,请让我知道,但它看起来并不可能:MongoDB - 保存与更新文档中的特定字段

enter image description here

出现的问题是,当用户保存,它创建一个新文档,并将用户的密码和salt覆盖到某个值。我希望能够调用“更新”功能,只会更新一个领域,但我不知道如何。有没有办法做到这一点与保存功能?

相关代码:

exports.updateUserRoles = function(req, res) { 
    var currUser = req.body; 
    User.findById(currUser._id, function(err, user) { 
    //user.roles = currUser.roles; 
    user.save({ _id : '56467b28ba57d8d890242cfa', roles : 'admin' }); 

    //THE BELOW WAS A PREVIOUS ATTEMPT 

    /*user.save(function(err) { 
     if (err) { 
      return res.status(400).send({ 
       message: errorHandler.getErrorMessage(err) 
      }); 
     } else { 
      res.jsonp(user); 
      console.log('test2'); 
     } 
    });*/ 
}); 
}; 

尝试别的东西,似乎很接近,但仍然还没有应用。

这里是我运行的是什么:

exports.updateUserRoles = function(req, res) { 
    var currUser = req.body; 
    User.findById(currUser._id, function(err, user) { 
     //user.roles = currUser.roles; 
     //user.roles.set(0, 'admin'); 
     console.log('test'); 
     user.update(
      { _id: '56467b28ba57d8d890242cfa' }, 
      { 
       $set: { 
       roles: 'admin', 
       }, 
      } 
     ); 
     console.log('test2'); 
    }); 
}; 

在命中user.update线,我们在局部变量的用户,看到:

enter image description here

user.update去进入这个Document.prototype.update函数,看到:

enter image description here

的ARGS看起来要建设权,这_id我们的目标是,什么动作,看出:

enter image description here

但随后运行后,似乎没有任何改变。我非常难过。

回答

0

对于更新MongoDB中,您可以使用更新不同的原子的运营商,比如$集各个领域,$取消设置,$推等 例如:

var updateUserRoles = function(db, callback) { 
    db.collection('users').updateOne(
     { "_id", : "user_id", }, 
     { $set: { "password": "new_password" } }, 
     function(err, results) { 
     console.log(results); 
     callback(); 
     } 
    ); 
};