2016-04-29 48 views
0

我在MongoDB的2.6以下結構:如何從陣列中蒙戈深嵌套文檔拉值

db.processes: { 
    _id: ObjectId("572756344031b585d03dca57"), 

    activities: [ 
     { 
     procedures: [ 
      { 
      implications_ids: [ 
       ObjectId("50871f11d52ef600020128a2"), ObjectId("50871f17d52ef60002012d03") 
      ] 
      } 
     ] 
     } 
    ] 
} 

我想從所有陣列implications_ids刪除值ObjectId("50871f11d52ef600020128a2")。我寫的命令:

`db.processes.update({}, 
{ $pull: { activities: { procedures: { implications_ids: ObjectId("50871f11d52ef600020128a2") } } } }, 
{ multi: true, safe: true } 
)` 

命令完成執行,但不更新任何文件:

WriteResult({ "nMatched" : 199, "nUpserted" : 0, "nModified" : 0 })

我在做什麼錯?

回答

0

試過這個。我在mongo3.2測試,所以不知道這是否正常工作,以及在2.6

db.foo.update({}, { $pull: { "activities.procedures.implications_ids" : ObjectId("50871f11d52ef600020128a2") }}, { multi: true }) 

我用

db.foo.insert({ activities: { 
     procedures: { 
     implications_ids: [ ObjectId("50871f11d52ef600020128a2"), 
          ObjectId("50871f17d52ef60002012d03")] 
     } 
    } 
    }); 

並獲得

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

> db.foo.find() 

{ "_id" : ObjectId("5723a45f0a8d4f8f305690e6"), "activities" : { "procedures" : 
{ "implications_ids" : [ ObjectId("50871f17d52ef60002012d03") ] } } } 
> 

命令執行後,只需更改名稱你的文檔有

+0

有趣的是,當我按照你的建議嘗試使用點符號的更新時,我得到了以下消息:'不能使用該部分(活動({activities:[{_id:ObjectId(),...}] –

+0

過去你的insert語句,我可以檢查 – Koitoer

+0

正確反映我的db結構的insert語句是: db.processes.insert( {活動:[ {程序:[ {implications_ids:[的ObjectId( 「50871f11d52ef600020128a2」),的ObjectId( 「50871f17d52ef60002012d03」)]} ]} ]} ) –