2017-01-10 97 views
0

我確定這必須是重複的,但我現在必須已經閱讀了100個問題,但我仍然無法弄清楚。使用函數參數作爲Mongoose Update中的對象鍵值

我有一個功能,需要四個aguments:senderId,field,contentresponse在一個節點模塊。函數本身運行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

我錯過了什麼?

回答

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); 
     } 
    }); 
}; 

未經測試,但希望應該工作。

FYI:這裏有沒有蒙戈等here

+0

完美。謝謝! – tombraider

+0

很高興工作:-) – dandanknight

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); 
     } 
    }); 
}; 
相關問題