2016-10-07 26 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

够公平的:)我会尽快接受你的回答,只要系统允许。 –

相关问题