MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mise à jour d'un enregistrement approfondi dans MongoDb

Le problème est que vous ne pouvez pas utiliser le $ Opérateur pour afficher la correspondance à des niveaux imbriqués dans un tableau. Et surtout, vous ne pouvez spécifier qu'une seule fois.

Comme indiqué dans la documentation , est-ce que le $ sera seulement correspondre au premier élément trouvé. Ce n'est pas seulement signifie que si vous aviez plusieurs correspondances pour votre requête, seule la première serait sélectionnée, cela signifie également que seulement la première correspondance la position du tableau sera utilisée. Cela signifie que quelque chose comme ça ne fonctionnerait pas non plus :

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Comme cela correspondrait à tort à l'index 1 valorisez et mettez à jour un élément auquel vous ne vous attendiez pas.

Si vous pouviez éventuellement mettre à jour l'ensemble tableau alors ce qui suit fonctionnerait :

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

C'est comme je l'ai dit, parce que le index correspond au premier tableau.

Mais étant donné la structure que vous avez, il semblerait que votre meilleure option soit de changer ce tableau de niveau supérieur en un sous-document à la place. À moins qu'en réalité, cela ait une raison d'être un tableau, plutôt que les deux types de documents mixtes qu'il semble être maintenant.