2015-10-05 68 views
0

假设以下文档结构,如何使用变量来定义指定的键?价值观可以是观察的,超现实的,物理的,其他的。如何使用变量作为密钥来更新mongo集合

如果需要使用对象来创建更新,请显示如何。如果重构文件会更好,那么建议是受欢迎的。

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的其他答案不利用嵌入式文档,这似乎是一个问题。

+0

请你尝试 – challett

+3

@mvanio此更新您的问题似乎像[这]一式两份(https://stackoverflow.com/questions/18577825/when-update-nested -collection-in-meteor-how-to-pass-variable-for-the-update-pat)和[this](https://stackoverflow.com/questions/22568673/updating-a-specific-element-in-一个阵列与 - mongodb的-流星)。那些回答你的问题还是你问了别的? –

+0

@DavidWeldon试过这些,认为我不懂如何将解决方案与嵌入式文档结合使用。或者也许文档结构关闭。很好的博客BTW,几次提到你的“常见错误”。很有用。 – mvanio

回答

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); 
    } 
); 
+0

谢谢。经过测试,它按预期工作。 FWIW我很近。 – mvanio