2017-07-27 25 views
0

我試圖創建一個函數來更新Mongoose模型中的不同類型的選項,並遇到了這種奇怪的行爲。 這就是我想要做的。現在Mongoose findOneAndUpdate不接受切換大小寫值

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的文檔。 有人可以解釋爲什麼第二件作品,而不是第一件作品(不更新文件)。謝謝。

回答

2

在ES6,您使用括號標記可以定義computed keys

User.findOneAndUpdate(query, { 
    $set: { 
     [field]: status, 
     last_updated: moment().format('llll') 
    } 
}, callback); 
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

我不認爲你可以有一個變量作爲一個重要...如果你這樣說的話......變量本身就成了一個字符串,併成爲關鍵...不會出現在變量的值在鑰匙的地方

相關問題