Използвайте $addToSet
вместо $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
РЕДАКТИРАНЕ:
Няма прост вграден подход за условно актуализиране на поддокумент в поле на масив, по конкретно свойство. Въпреки това, малък трик може да свърши работата, като изпълни две команди последователно.
Например:Ако искаме да актуализираме quizzes
поле с обекта { "wk": 7.0, "score": 8.0 }
, можем да го направим в две стъпки:
Стъпка 1: $pull
извадете поддокументи от quizzes
масив, където "wk": 7.0
. (Нищо не се случва, ако съответстващ поддокумент не бъде намерен ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Стъпка 2: $addToSet
поддокумента.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Можете да комбинирате горните две команди за актуализиране с помощта на bulk.find().update()