2016-10-07 61 views
2

我試圖更新MongoDB文檔中的值。文檔有很多字段,但我只想指定其中的一些,具體取決於我在UI中更改的字段。Javascript:如何通過指定字符串中的字段來創建對象?

var monthField='calendar.m'+month+'.result'; 
var triField='calendar.t'+trimester+'.result'; 
var yearField="calendar.year.result"; 

Objective.update({_id:{$in:objective.parents}},{ 
    $inc: 
    { 
     yearField:transaction.value, 
     monthField:transaction.value, 
     triField:transaction.value 
    }}, 
    {multi:true, upsert:true} 
) 

不幸的是,上面的代碼不「EVAL」的yearFieldmonthFieldtriField他們的字符串值,而是試圖更新彷彿文檔中存在的這些領域。

我知道我可以找到文件,更改值,並將它們逐個保存,但有沒有辦法做我想做的事情?在一條更新線中做得更好。

+0

您使用的是什麼JavaScript運行時環境? –

+0

我使用Node.js,如果這是你想知道的。 –

+2

你在這裏沒有處理JSON。 JSON * always *是一個字符串,沒有別的(該字符串的內容看起來像Javascript,但它不是)。你在這裏處理的只是本地對象,即對象文字。 – Tomalak

回答

5

由於您使用Node.js的,你可以利用computed property names,只是在括號包裹的名字:

var monthField='calendar.m'+month+'.result'; 
var triField='calendar.t'+trimester+'.result'; 
var yearField="calendar.year.result"; 

Objective.update({_id:{$in:objective.parents}},{ 
    $inc: 
    { 
     [yearField]:transaction.value, 
     [monthField]:transaction.value, 
     [triField]:transaction.value 
    }}, 
    {multi:true, upsert:true} 
) 

這句法加入到ES2015的規格,雖然不是普遍存在的,但,它在node.js中受支持。

+0

完美。謝謝。所以這相當於在角度中使用{{}}? –

+0

@RicardoMota不知道 - 我不是一個有角色的人:) –

+0

夠公平的:)我會盡快接受你的回答,只要系統允許。 –

相關問題