Gunakan $addToSet
bukannya $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
EDIT:
Tidak ada pendekatan bawaan sederhana untuk pembaruan sub-dokumen bersyarat dalam bidang larik, menurut properti tertentu. Namun, trik kecil dapat melakukannya dengan menjalankan dua perintah secara berurutan.
Misalnya:Jika kita ingin memperbarui quizzes
bidang dengan objek { "wk": 7.0, "score": 8.0 }
, kita dapat melakukannya dalam dua langkah:
Langkah-1: $pull
keluarkan sub-dokumen dari quizzes
larik di mana "wk": 7.0
. (Tidak ada yang terjadi jika sub-dokumen yang cocok tidak ditemukan ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Langkah-2: $addToSet
sub-dokumen.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Anda dapat menggabungkan dua perintah pembaruan di atas menggunakan bulk.find().update()