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