2016-04-14 29 views
2

鑑於這種樣本文檔:addToSet在一個數組的數組

> db.sample.find().pretty() 
{ 
    "_id" : ObjectId("570f76ca4fe66c8ae29f13cd"), 
    "a" : [ 
     { 
      "b" : [ 
       1, 
       2, 
       3 
      ] 
     }, 
     { 
      "b" : [ 
       1, 
       2, 
       3, 
       4 
      ] 
     }, 
     { 
      "b" : [ 
       4 
      ] 
     } 
    ] 
} 

我想4號添加到b陣列每個實例的a陣列中

我曾希望

db.sample.update({},{$addToSet:{"a.b":4}}) 

會做的伎倆,但產生了錯誤:

cannot use the part (a of a.b) to traverse the element ({a: [ { b: [ 1.0, 2.0, 3.0 ] }, { b: [ 1.0, 2.0, 3.0, 4.0 ] }, { b: [ 4.0 ] } ]}) 

這樣的更新可能嗎?很顯然,我可以將每個文檔都提交給客戶端進行更新並進行替換,但這只是最後的手段。

+1

看起來像你試圖做這個'db.sample.update({},{$ addToSet:{a [0] .b:4,a [1] .b:4,a [2] .b:4}})'。你將不得不通過數組中的每個項目。 –

回答

1

看起來直到SERVER-1243吉拉實現,你就會有它一個接一個數組中的每個項目,要做到如:

db.sample.update({},{$addToSet:{"a.0.b":4}}) 
db.sample.update({},{$addToSet:{"a.1.b":4}}) 

如果您只需要更新您第一要素可能已經使用:

db.sample.update({},{$addToSet:{"a.$.b":4}}) 
+0

您提供的鏈接中的評論當然會使「有趣」的閱讀成爲可能。更重要的是,在我的具體情況下,使用$運算符已經節省了一天的時間。謝謝! –

相關問題