2013-08-20 93 views
2

我正在使用mongoid 3.1和Ruby 1.9.3,我試圖更新數組中的值。我可以在mongodb的CLI中成功執行以下命令,但似乎找不到適用於mongoid的解決方案/轉換。mongoid更新陣列中的元素

user.update({ activities: { $elemMatch: { uuid: "1111111-xxxx-xxxx" }}}, { $set: { 'activities.$.submitted': true }}) 

對於上下文中的文檔的樣子:

{ 
    "_id" : ...., 
    "user_name" : "bob", 
    "activities: [ 
     { 
      uuid: "1111111-xxxx-xxxx", 
      submitted: true, 
     }, 
     { 
      uuid: "222222-xxxx-xxxx", 
      submitted: false, 
     }, 
     { 
      uuid: "333333-xxxx-xxxx", 
      submitted: false, 
     } 
    ] 
} 

的目標是真正基於uuid的值來更改提交。從我所知道的情況來看,所有mongoid中的「更新」解決方案只處理文檔根目錄中的屬性,並且不能爲$ position操作符提供選項。

任何幫助,將不勝感激。

謝謝

+1

看起來像我發現在GitHub上的問題討論了答案。 我的解決方案是: User.elem_match(activities:{type:「redemption」})。elem_match(activities:{uuid:uuid})。update(「$ set」=> {「activities。$。提交「=> true}) –

回答

2

看起來我在github問題討論中找到了答案。

對我來說,解決辦法是:

User.elem_match(activities: { type: "redemption" }).elem_match(activities: { uuid: uuid }).update("$set" => {"activities.$.submitted" => true })