2015-07-26 4 views
0

Bonsoir. J'ai ce document MongoDB. enter image description hereMongoDB - mise à jour du motif dénormalisé

Ce document contient des informations sur M. Allegri, un entraîneur italien. Le tableau coached_Team contient toutes les équipes entraînées par Allegri. Dans cet exemple, il n'y a qu'une seule équipe, mais c'est juste un test; un entraîneur a beaucoup d'équipe dans le tableau coached_Team. Existe-t-il un moyen de mettre à jour le palmarès d'une seule équipe?
Par exemple, la Juventus a remporté l'année dernière 1 Serie A et 1 Coppa Italia. Cette requête, clairement, ne fonctionne pas parce que dans ce tableau, il y aura de toutes les équipes palmarès que Allegri a entraînés:

db.coach.update({_id:"MA_1967"}, {$set: {"coached_Team.palmarès.Serie A":33}}) 

Alors, je pensais que d'utiliser un modèle normalisé au lieu de dénormaliser. Mais je veux savoir s'il existe un moyen de mettre à jour les palmarés de la Juventus, par exemple, en utilisant ce motif dénormalisé.
Merci.

Répondre

1

Oui, vous pouvez utiliser l'opérateur de position MongoDB dans votre instruction de mise à jour. L'opérateur de position $ a quelques avertissements à lire mais vous pouvez écrire votre requête comme ceci.

db.coach.update({_id:"MA_1967", 'coached_Team': "Juventus"}, {$set: {"coached_Team.$.palmarès.Serie A":33}}) 

afin d'utiliser l'opérateur de position $ vous devez inclure un et un seul attribut de tableau dans votre trouvaille. Le $ correspondra alors seulement au premier élément du tableau qui correspond au document que vous recherchez. Ainsi, votre instruction de mise à jour lit quelque chose comme "définir le premier élément de coached_Team qui correspond à ma requête de tableau", puis vous accédez à l'attribut palmares et Serie A via l'opérateur de position $. Les opérateurs $ et elemMatch sont des opérateurs très puissants, mais malheureusement parfois très confus, à lire dans MongoDB.

+0

Très bien. Cela fonctionne parfaitement. Je vous remercie – DistribuzioneGaussiana