在Mongoose Update中使用函数参数作为对象键

时间:2017-01-10 15:54:08

标签: node.js mongodb mongoose

我确信这一定是重复的,但我现在必须阅读100个问题,但我仍然无法解决这个问题。

我在一个节点模块中有一个需要四个基础的函数:senderIdfieldcontentresponse。函数本身运行Mongoose Model Update以使用提供的内容更新指定的字段。代码如下:

module.exports = function(senderId, field, content, response) {

    var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";

    cemForm.update({ "senderId" : senderId }, {
        field : content
    }, function(err, res) {
        if (err) {
            console.log(err);
            fb.textOnlyMessage(senderId, errorMessage);
        } else {
            fb.sendButtonMessage(senderId, response);
        }
    });
};

如果我像这样使用这个功能:

cemUpdate(event.sender.id, "issueType", cemQuestions.issue.buttons[0].title, cemQuestions.voiceSpecificIssue);

代码执行完美,我得到了正确的响应,但数据库没有更新。如果我用其内容(field)替换对象键issueType,则数据库会相应地更新。我已经尝试记录变量,我100%确定它是一个字符串,它是issueType

我错过了什么?

2 个答案:

答案 0 :(得分:1)

这是因为您无法使用变量引用字段。为了解决这个问题......

module.exports = function(senderId, field, content, response) {

    var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";

    var updateObj = {};
    updateobj[field] = content;

    cemForm.update({ "senderId" : senderId }, updateObj, function(err, res) {
        if (err) {
            console.log(err);
            fb.textOnlyMessage(senderId, errorMessage);
        } else {
            fb.sendButtonMessage(senderId, response);
        }
    });
};

未经测试,但希望能够正常工作。

仅供参考:这是一个没有Mongo等的简单例子here

答案 1 :(得分:1)

在ES6中,您可以使用computed property keys

module.exports = function(senderId, field, content, response) {

    var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";

    cemForm.update({ "senderId" : senderId }, {
        [field] : content
    }, function(err, res) {
        if (err) {
            console.log(err);
            fb.textOnlyMessage(senderId, errorMessage);
        } else {
            fb.sendButtonMessage(senderId, response);
        }
    });
};