MongoDb数组更新

时间:2011-10-31 18:50:46

标签: 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':[]}}})

不起作用)

有没有办法同时更新这些?

非常感谢

2 个答案:

答案 0 :(得分:2)

您可以将多个更新操作捆绑在一起,但您在伪代码中编写的唯一问题是您要推送的元素属于不同的数组(分别是graph和graph.children。)这需要完成两推。

试试这个:

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

答案 1 :(得分:1)

修改器数组中的多个键使其停止工作。如果我读了你的shema,你必须做两次更新,因为你正试图将一个新孩子推到当前位置,并将一个新记录推送到父母的子文档中。

阻止它的是儿童[]设置。 Mongo只是不知道在哪里设置它。

我想你可以试试:

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

但这是一个长镜头