Mongoose findOneAndUpdate不接受switch case值

时间:2017-07-27 15:41:40

标签: node.js mongodb mongoose switch-statement

我试图创建一个单独的函数来更新Mongoose模型中的不同类型的选项,并遇到这种奇怪的行为。 这就是我想要做的事情。

module.exports.updateUser = function(id, action, status, callback) {
const query = {
    _id: id
};

let field = '';
switch (action) {
    case 'download':
        field = 'download_permission';
        break;
    case 'upload':
        field = 'upload_permission';
        break;
    case 'view':
        field = 'view_permission';
        break;
    case 'edit':
        field = 'edit_permission';
        break;

}
User.findOneAndUpdate(query, {
    $set: {
        field: status,
        last_updated: moment().format('llll')
    }
}, callback);

};

现在,如果我尝试这样的话:

User.findOneAndUpdate(query, {
$set: {
    'edit_permission': status,
    last_updated: moment().format('llll')
}
}, callback);

};

它实际上更新了mongodb中的文档。 有人可以解释为什么第二个工作,而不是第一个(不更新文档)。感谢。

3 个答案:

答案 0 :(得分:2)

User.findOneAndUpdate(query, {
    $set: {
       problem ------->>>>field<<<<<: status,
        last_updated: moment().format('llll')
    }
}, callback);

字段对象参数不会解析为变量field的值。

这应该解决它:

const setStatement = { 
    last_updated: moment().format('llll') 
};
setStatement[field] = status;

User.findOneAndUpdate(query, {
    $set: setStatement
}, callback);

答案 1 :(得分:2)

在ES6中,您可以使用括号表示法定义computed keys

User.findOneAndUpdate(query, {
    $set: {
        [field]: status,
        last_updated: moment().format('llll')
    }
}, callback);

答案 2 :(得分:1)

我不认为你可以将变量作为键...如果你这样说......变量本身就变成了一个字符串并成为键......变量的值不会出现在键的位置< / p>