Använd $addToSet
istället för $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
EDIT:
Det finns inget enkelt inbyggt tillvägagångssätt för villkorlig uppdatering av underdokument i ett matrisfält, efter specifik egenskap. Ett litet knep kan dock göra jobbet genom att utföra två kommandon i följd.
Till exempel:Om vi vill uppdatera quizzes
fält med objektet { "wk": 7.0, "score": 8.0 }
, vi kan göra det i två steg:
Steg-1: $pull
ut underdokument från quizzes
array där "wk": 7.0
. (Inget händer om matchande underdokument inte hittas ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Steg-2: $addToSet
underdokumentet.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Du kan kombinera ovanstående två uppdateringskommandon med bulk.find().update()