2014-05-19 43 views
-1

我想基於條件更新數組對象。以下是我的方案: -問題更新mongoDb中的數組對象

enter image description here

我想從目前的更新狀態存檔。

我已經嘗試了幾個小時的許多事情,但仍然沒有運氣。像這樣: -

db.user.update({ 
    'injury._id': ObjectId("5374cb4d1e0386c02800006a"), 
    'injury.injurydata.locationaddressinjury': { 
     $elemMatch: { 
      'status': 'current' 
     } 
    } 
}, { 
    $set: { 
     'injury.injurydata.locationaddressinjury.status': 'archive' 
    } 
}) 
+0

請注意您的代碼的格式。此外,圖片以外的代碼示例對我們來說更容易閱讀。 – yaoxing

+1

幾天前,使用完全相同的截圖來詢問[這個問題](http://stackoverflow.com/q/23693889/2313887)。你的代碼示例是不同的,但問題仍然基本相同。 –

回答

0

由於圖片難以閱讀您的數據結構。但我想你正在尋找的更新將是這樣的:

db.user.update({ 
    'injury._id': ObjectId("5374cb4d1e0386c02800006a"), 
    'injury.injurydata.locationaddressinjury': { 
     $elemMatch: { 
      'status': 'current' 
     } 
    } 
}, { 
    $set: { 
     'injury.injurydata.locationaddressinjury.$.status': 'archive' 
    } 
}); 

$將引用您找到的元素。而如果您正在尋找一種更新所有元素的方法。恐怕$ elemMatch會匹配滿足條件的第一個元素。

+1

嵌套數組,匹配找到的第一個數組。因此,如果匹配是內部數組中的第二個元素,但頂級數組是第一個元素,那麼匹配的索引仍然是0而不是1。任何發生這種工作只會是愚蠢的運氣。 –