当我像这样使用时,Mongodb不会更新

时间:2014-11-18 20:36:04

标签: node.js mongodb mongoose

试图为我做短路。我想为所有查询创建一个函数。对于settings.amountsettings.balance等。

exports.updateUsers = function ( user_id, where, what, pass )  {
    var _where = 'settings.'+where; //when I use it doesn't update
    user.findOneAndUpdate(
          {'user_id' : user_id}, 
          {_where : what }).exec(function(e,d){
            pass("ok")
          })
};

我如何实现自己的需求?有什么办法吗?

2 个答案:

答案 0 :(得分:2)

{_where : what }_where视为String字面值,相当于:{"_where":what}。因此,您没有获得任何更新结果,因为没有_where之类的字段。您需要以下面的方式分配它以使其正常工作。

exports.updateUsers = function ( user_id, where, what, pass )  {
    var _where = 'settings.'+where; //when I use it doesn't update
    var update = {};
    update[_where] = what;
    user.findOneAndUpdate(
          {'user_id' : user_id}, 
          update).exec(function(e,d){
            pass("ok")
          })
};

update[_where] = what;解析了_where变量中的值。

答案 1 :(得分:1)

您需要使用$ set运算符。有关示例,请参阅MongoDB docs

所以我认为你的功能可以写成:

exports.updateUsers = function ( user_id, where, what, pass )  {
    var setQuery = { $set: {} };
    setQuery.$set['settings.'+where] = what;
    user.findOneAndUpdate(
          {'user_id' : user_id}, 
          setQuery).exec(function(e,d){
            pass("ok")
          })
};