我正在尝试更新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':[]}}})
不起作用)
有没有办法同时更新这些?
非常感谢
答案 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':[]}}}})
但这是一个长镜头