Utilisez $addToSet
au lieu de $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
MODIF :
Il n'existe pas d'approche intégrée simple pour la mise à jour conditionnelle des sous-documents dans un champ de tableau, par propriété spécifique. Cependant, une petite astuce peut faire l'affaire en exécutant deux commandes en séquence.
Par exemple :Si nous voulons mettre à jour les quizzes
champ avec l'objet { "wk": 7.0, "score": 8.0 }
, nous pouvons le faire en deux étapes :
Étape 1 : $pull
sortir des sous-documents des quizzes
tableau où "wk": 7.0
. (Rien ne se passe si le sous-document correspondant est introuvable ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Étape 2 : $addToSet
le sous-document.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Vous pouvez combiner les deux commandes de mise à jour ci-dessus en utilisant le bulk.find().update()