2013-02-14 40 views
0

是否可以使用一次更新更新文檔的兩個子陣列(不檢索文檔並使用樂觀併發更新)?在一次更新中更新兩個子陣列

比方說,我有以下文件:

{ "_id" : 2, 
    "arr1" : [ 
      { "Id" : 10, "Value" : "abc" }, 
      { "Id" : 20, "Value" : "abc" }, 
      { "Id" : 30, "Value" : "abc" }, 
      { "Id" : 40, "Value" : "abc" }, 
      { "Id" : 50, "Value" : "abc" } 
      ], 
    "arr2" : [ 
      { "Id" : 12, "Text" : "abc" }, 
      { "Id" : 22, "Text" : "abc" }, 
      { "Id" : 32, "Text" : "abc" }, 
      { "Id" : 42, "Text" : "abc" }, 
      { "Id" : 52, "Text" : "abc" } 
      ] 
} 

我試圖做到這一點,但它似乎並沒有修改正確的子文檔:

db.col.update(
    { "_id": 2, arr1: { $elemMatch: { Id: 30 } }, arr2: { $elemMatch: {Id: 42} } }, 
    { $set: { 
     "arr1.$.Value": "Changed First", 
     "arr2.$.Text": "Changed Second" 
     } 
    }) 
+0

似乎如果這是一個散列,它會b etter爲此更新提供服務。爲什麼它是一個散列而不是一個散列? – 2013-02-14 13:41:05

+0

對不起,我不明白你的意思? – Flavien 2013-02-14 13:43:46

+0

我的意思是,爲什麼你的結構不是這樣的:http://pastie.org/6163493? – 2013-02-14 13:46:38

回答

1

在我看來,如果你的數據看起來像這樣,你可以很容易地執行你的更新:

{ 
    "_id" : 2, 
    "arr1" : { 
    "10": "abc", 
    "20": "abc", 
    "30": "abc", 
    "40": "abc", 
    "50": "abc" 

    } 
}