Użyj $addToSet
zamiast $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
EDYTUJ:
Nie ma prostego wbudowanego podejścia do warunkowej aktualizacji poddokumentu w polu tablicy według określonej właściwości. Jednak mała sztuczka może załatwić sprawę, wykonując dwa polecenia po kolei.
Na przykład:Jeśli chcemy zaktualizować quizzes
pole z obiektem { "wk": 7.0, "score": 8.0 }
, możemy to zrobić w dwóch krokach:
Krok 1: $pull
wyślij pod-dokumenty z quizzes
tablica, gdzie "wk": 7.0
. (Nic się nie dzieje, jeśli nie znaleziono pasującego dokumentu podrzędnego ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Krok 2: $addToSet
dokument podrzędny.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Możesz połączyć powyższe dwa polecenia aktualizacji za pomocą bulk.find().update()