2015-10-05 73 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