如何将字段名称传递给Mongoose的update()方法?

时间:2016-07-21 15:36:04

标签: javascript node.js mongodb express mongoose

我想更新dataToChange对象中包含的每个字段但由于某种原因我无法将密钥名称传递给update(),我的意思是该方法不会从外部获取它并且它正在寻找" key&#34 ;数据库对象中的字段。我该怎么做?我尝试使用${key},但它被视为错误。

changeUserInfoFashion = function (id, dataToChange, res, callback) {
       //var id = id;
    _.forIn(dataToChange, function (value, key) {
        key.toString();
        console.log('I AM GOING TO UPDATE ' + key + " WITH " + value);
        User.update(
            {"_id": id},
            //Here I need to pass key -->
            {key: value},
            function (err, results) {
                console.log(results);
                if (err) {
                    return callback();
                }
                return res.json({success: true, msg: key + ' changed.'}).status(200);
            });
    });
 };

dataToChange的示例

{
name: 'Baby',
age: 32
}

3 个答案:

答案 0 :(得分:2)

无需迭代对象并更新每个字段,您可以使用 $set 运算符,如下所示:

changeUserInfoFashion = function (id, dataToChange, res, callback) {       
    User.update(
        { "_id": id },
        { "$set": dataToChange },
        function (err, results) {
            console.log(results);
            if (err) { return callback(); }
            return res.json({
                success: true, 
                msg: JSON.stringify(dataToChange) + ' changed.'
            }).status(200);
        }
    );    
};

答案 1 :(得分:1)

那不行。创建一个空对象并为其指定键值:

_.forIn(dataToChange, function (value, key) {
    key.toString();
    console.log('I AM GOING TO UPDATE ' + key + " WITH " + value);
    var updateData = {};
    updateData[key] = value;
    User.update(
        {"_id": id},
        //Here I need to pass key -->
        updateData,
        function (err, results) {
            console.log(results);
            if (err) {
                return callback();
            }
            return res.json({success: true, msg: key + ' changed.'}).status(200);
        });
});

答案 2 :(得分:1)

changeUserInfoFashion = function (id, dataToChange, res, callback) {
       //var id = id;
        User.update(
            {"_id": id},
            dataToChange,
            function (err, results) {
                console.log(results);
                if (err) {
                    return callback();
                }
                return res.json({success: true, msg: key + ' changed.'}).status(200);
            });
 };