Обновление массива MongoDb - PullRequest
       5

Обновление массива MongoDb

0 голосов
/ 31 октября 2011

Я пытаюсь обновить следующий документ в 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':[]}}})

(печально:

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

не работает)

Есть ли способ обновить их одновременно?

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Вы можете связать несколько операций обновления вместе, но единственная проблема с тем, что вы написали в псевдокоде, заключается в том, что отправляемые вами элементы принадлежат разным массивам (соответственно Graph и Graph.children.) Это необходимо сделать.в два нажатия.

Попробуйте:

db.test.update( { id:10, 'graph.userId':1 }, 
        { $push:{'graph.$.children' : 4 }, $push:{'graph' : {'userId':4,'children':[]}} } )
1 голос
/ 02 ноября 2011

Несколько ключей в массиве модификаторов мешают его работе. Вы должны сделать два обновления, чтобы сделать это, если я правильно прочитал вашу схему, потому что вы пытаетесь поместить нового ребенка в текущую позицию и вставить новую запись в поддокумент родителя.

То, что останавливает его, - это настройка детей []. Монго просто не знает, где это установить.

Полагаю, вы могли бы попробовать:

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

Но это длинный выстрел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...