【问题标题】:MongoDB - Save vs Update for specific fields in documentMongoDB - 保存与更新文档中的特定字段
【发布时间】:2016-02-15 17:09:30
【问题描述】:

使用 MEAN 堆栈,我试图让管理员帐户更新另一个用户的信息,在这种情况下,他们在网站上的标题/角色。我遇到的问题是编辑用户时唯一可用的函数是 save() 函数。可能是我可以使用更新功能,如果是这种情况,请告诉我,但看起来不可能:

问题出现了,当用户被保存时,它会创建一个新文档,并将用户的密码和盐覆盖到某个值。我希望能够调用一个“更新”函数,它只会更新一个字段,但我不知道怎么做。有没有办法用保存功能做到这一点?

相关代码:

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 行后,我们在局部变量中有用户,可见:

user.update 进入这个 Document.prototype.update 函数,可见:

args 看起来是正确的,我们所针对的 _id 以及操作是什么,可见:

但是在运行之后,似乎什么都没有改变。我非常难过。

【问题讨论】:

    标签: javascript mongodb mean-stack mean


    【解决方案1】:

    要更新 mongodb 中的各个字段,您可以使用 update 与不同的原子操作符,如 $set、$unset、$push 等。 示例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 2022-01-20
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2022-08-02
      相关资源
      最近更新 更多