Javascript:如何通过在字符串中指定字段来创建对象?

Javascript:如何通过在字符串中指定字段来创建对象?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在尝试更新MongoDB文档中的值。文档有许多字段,但我只想根据我在UI中更改的字段指定其中的几个字段 var monthField='calendar.m'+month+'.result'; var triField='calendar.t'+trimester+'.result'; var yearField="calendar.year.result"; Objective.update({_id:{$in:objective.parents}},{ $inc: {

我正在尝试更新MongoDB文档中的值。文档有许多字段,但我只想根据我在UI中更改的字段指定其中的几个字段

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}
  )
不幸的是,上面的代码没有将
yearField
monthField
triField
的值“eval”到它们的字符串值,而是试图更新,就好像文档中存在这些字段一样


我知道我可以找到文档,修改值,然后一个一个地保存它们,但是有没有办法做到我想做的事情呢?在一个更新行中进行更新要好得多

由于您使用的是node.js,只需将名称用括号括起来,就可以使用:

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中受支持。

您使用的JavaScript运行时环境是什么?如果您想知道的话,我使用的是node.js。您在这里不是在处理JSON。JSON始终是一个字符串,除此之外没有其他内容(该字符串的内容看起来像Javascript,但事实并非如此)。您在这里处理的只是本机对象,即object literals.Perfect。非常感谢。这相当于在angular中使用{{}?@RicardoMota不知道-我不是一个有棱角的人:)足够公平:)只要系统允许,我会接受你的答案。