如何使用变量作为键来更新mongo集合

时间:2015-10-05 18:08:47

标签: javascript mongodb meteor

假设以下文档结构,如何使用变量来定义指示的键?价值观可以是观察,超现实,物理,其他。

如果需要使用对象来创建更新,请说明如何。如果重组文件会更好,那么欢迎提出建议。

    Comedians.update(
      { "id":row[0]},
      { 'id':row[0],
        'surname':row[1],
        'firstName':row[2],
        'observational':{ //<--key generated dynamically (observational/ surreal/ physical)
          'routines':{
            'year1':{
              'club1':row[6],
              'club2':row[8],
              'club3':row[10]
            },
            'year2':{
              'club1':row[14],
              'club2':row[16],
              'club3':row[18]
            },
            'year3':{
              'club1':row[20],
              'club2':row[22],
              'club3':row[24]
            }
          },
          'jokes':{
            'year1':{
              'club1':row[7],
              'club2':row[9],
              'club3':row[11]
            },
            'year2':{
              'club1':row[13],
              'club2':row[15],
              'club3':row[17]
            },
            'year3':{
              'club1':row[19],
              'club2':row[21],
              'club3':row[23]
            }
          }, 
        } 
      },
      {upsert: true},
      function(error,result){
        if ( error ) console.log ( error ); 
        if ( result ) console.log ( result );
      });

SO上的其他答案不使用嵌入式文档,这似乎是一个问题。

1 个答案:

答案 0 :(得分:0)

这是基本的javascript。您需要使用代码创建要用于更新的对象,而不是将其写为常量。这是一种方式:

var newObj = { 
    'id':row[0],
    'surname':row[1],
    'firstName':row[2],
};
var myVariable = "observational";  //<--key generated dynamically (observational/ surreal/ physical)
newObj[myVariable] = {
    'routines':{
        'year1':{
            'club1':row[6],
            'club2':row[8],
            'club3':row[10]
        },
        'year2':{
            'club1':row[14],
            'club2':row[16],
            'club3':row[18]
        },
        'year3':{
            'club1':row[20],
            'club2':row[22],
            'club3':row[24]
        }
    },
    'jokes':{
        'year1':{
            'club1':row[7],
            'club2':row[9],
            'club3':row[11]
        },
        'year2':{
            'club1':row[13],
            'club2':row[15],
            'club3':row[17]
        },
        'year3':{
            'club1':row[19],
            'club2':row[21],
            'club3':row[23]
        }
    }, 
};

Comedians.update(
    { "id":row[0]},
    newObj,
    {upsert: true},
    function(error,result){
        if ( error ) console.log ( error ); 
        if ( result ) console.log ( result );
    }
);