2011-10-31 3 views
0

J'essaie de mettre à jour le document suivant dans Mongodb.Mise à jour du tableau MongoDb

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

    db.test.insert(doc) 

puis-je effectuer deux mises à jour:

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

ne fonctionne pas)

Est-il possible de mettre à jour ces simultanément?

Merci beaucoup

Répondre

1

Les multiples clés du tableau de modification arrêter de travailler. Vous devez faire deux mises à jour pour le faire si je lis votre shema juste parce que vous essayez de pousser un nouvel enfant sur la position actuelle et de pousser un nouvel enregistrement dans le sous-document du parent.

Ce qui l'arrête c'est le réglage enfants []. Mongo ne sait pas où mettre ça.

Je suppose que vous pouvez essayer:

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

Mais il est un long shot

+0

merci pour votre aide, un dommage la mise à jour simultanée ne fonctionne pas – jlezard

2

Vous pouvez regrouper les opérations de mise à jour multiples ensemble, mais la seule question avec ce que vous avez écrit dans le code pseudo est que les éléments que vous poussons appartiennent à différents tableaux (graphique et graph.children respectivement.) Cela doit être fait en deux poussées.

Essayez ceci:

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

pas de problème, aime mongo – jpredham

+0

vraiment désolé mais il se ce qui ne fonctionne pas. J'ai édité la question, merci – jlezard

+1

ne pas la deuxième poussée remplacer le premier car ils ont la même clé – light24bulbs

Questions connexes