2011-10-31 106 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