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()