2011-10-31 105 views
0

我正在嘗試更新Mongodb中的以下文檔。MongoDb陣列更新

doc = { id : 10 , graph :[{userId:1,children:[2]},{userId:2,children:[]}]} 

    db.test.insert(doc) 

然後我進行兩次更新:

db.test.update({'id':10,'graph.userId' : 1}, { $push:{'graph.$.children':10}}) 

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph':{'userId':10,'children':[]}}}) 

(Saddly:

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph.$.children':10},$push:{'graph':{'userId':10,'children':[]}}}) 

不工作)

有沒有一種方法可以同時更新這些?

非常感謝

回答

1

修飾符數組中的多個鍵停止工作了。如果我讀了你的shema,你必須做兩個更新,因爲你試圖將新的孩子推到當前位置,並將新記錄推送到父文檔的子文檔中。

停止它的事情是兒童[]設置。 Mongo只是不知道該在哪裏設置。

我想你可以嘗試:

db.test.update({'id':10,'graph.userId' : 1},{ $push:{'graph.$.children':10},$pushAll:{'graph':{{'userId':10,'children':[]}}}}) 

但它是一個長鏡頭

+0

感謝您的幫助,一個可憐的同時更新不起作用 – jlezard

2

你可以捆綁多個更新操作一起,但你寫的僞代碼什麼的唯一的問題是,你推屬於不同的陣列(圖和graph.children元素分別)。這需要在兩個推動下完成。

試試這個:

db.test.update({ id:10, 'graph.userId':1 }, 
     { $push:{'graph.$.children' : 4 }, $push:{'graph' : {'userId':4,'children':[]}} }) 
+0

沒有問題的,享受蒙戈 – jpredham

+0

真的很抱歉,但事實證明這是行不通的。我編輯了這個問題,謝謝 – jlezard

+1

不會第二次推覆蓋第一次,因爲他們有相同的鍵 – light24bulbs