2017-09-11 5 views
0

J'ai lu quelques autres messages ici sur Stackoverflow mais je n'ai trouvé aucune réponse "générale".Mettre à jour l'objet-élément dans Array dans MongoDB

Disons que j'ai une structure comme ceci:

{ 
    personsName: "Bob", 
    children: [ 
     {childsName: "Alice", age: "9", weight: "40"} 
     {childsName: "Peter", age: "12", weight: "80"} 
    ] 
} 

Maintenant, je veux modifier Peters poids, car il est en fait "45"

J'ai essayé:

.update(
    { personsName: "Bob", children.childsName: "Peter"}, 
    { 
     $set: {children: {weight :"45" } } 
    } 
    ) 

Pour moi cela devrait fonctionner ... Mise à jour le poids des enfants à "45" pour tous les enfants qui sont nommés "Peter" et appartiennent à "Bob" ... J'ai vu quelques solutions où ils mettent à jour le tableau par index, mais supposons que nous ne connaissons pas l'index, nous voulons mise à jour par la propriété childsName "childsName".

Quelle est la manière générale de faire cela?

+0

voir https://jira.mongodb.org/browse/SERVER-1243 –

+0

Cela semble très bien, mais malheureusement, j'utilise toujours une version plus ancienne et je ne veux pas changer cela dans mon projet MEAN. Il doit y avoir une option pour cela sur la version actuelle aussi ... –

+0

S'il y avait, le billet n'a pas été créé à la première place. Voir ma réponse, si vous êtes satisfait des limites de l'approche. –

Répondre

0

Si vous êtes sûr que Bob n'a pas plus de 1 Pierre, vous pouvez utiliser positional operator comme suit:

.update(
    { personsName: "Bob", "children.childsName": "Peter"}, 
    { 
    $set: {"children.$.weight" :"45" } 
    } 
) 

S'il vous plaît noter que l'opérateur met à jour le premier sous-document correspondant, et seulement aussi profond que 1 niveau.

+0

C'était facile - merci beaucoup !! ... il me semble que je dois faire quelques lectures sur '$' –