2015-10-21 25 views
0

的MongoDB 3.0.7 貓鼬4.1.12貓鼬/ MongoDB的 - 如何推動新的數組到正確的父數組元素

我要推新的元素:「BBB」 到組陣列住外機構單位內陣列...

原蒙戈從這樣的數據:

{ 
    orgs: [ 
     { 
      org: { 
       _bsontype: "ObjectID", 
       id: "123456789012" 
      }, 
      groups: [ 
       "aaa" 
      ] 
     } 
    ], 
    _id: { 
     _bsontype: "ObjectID", 
     id: "888888888888" 
    } 
} 

這樣:

{ 
    orgs: [ 
     { 
      org: { 
       _bsontype: "ObjectID", 
       id: "123456789012" 
      }, 
      groups: [ 
       "aaa", 
       "bbb" 
      ] 
     } 
    ], 
    _id: { 
     _bsontype: "ObjectID", 
     id: "888888888888" 
    } 
} 

這裏是一個硬編碼的解決方案但我不想 硬編碼數組索引(見0:「orgs.0.groups」)

dbModel.findByIdAndUpdate(

    { _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) }, 
    { $push : { 'orgs.0.groups' : 'bbb' 
       } 
    }, 
    { safe: true, 
     upsert: false, 
     new : true 
    } 
) 

...我希望一個簡單的「機構單位。 $ .groups'會工作,但沒有。也嘗試過'orgs.groups',也沒有。 我真的需要先檢索orgs數組,確定索引 ,然後執行一些第二操作以推送到正確的org數組元素?

PS - 建議重複回答沒有解決這個問題

+0

[更新MongoDB中數組中所有元素]的可能副本(http://stackoverflow.com/questions/33186596/update-all-elements-in-an-array-in-mongodb) – styvane

回答

1

找到解決辦法,只好用

dbModel.update 

dbModel.findOneAndUpdate nor dbModel.findByIdAndUpdate 

用 '$' 時,表示在匹配數組索引多級文件

'orgs.$.groups' 

此代碼的工作:

dbModel.update(

    { _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) }, 
    { $push : { 'orgs.$.groups' : 'bbb' 
       } 
    }, 
    { safe: true, 
     upsert: false, 
     new : true 
    } 
) 

我不知道這是貓鼬的錯誤嗎?似乎奇怪的findOneAndUpdate無法正常工作。