Sử dụng $addToSet thay vì $push .
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
CHỈNH SỬA:
Không có cách tiếp cận tích hợp đơn giản nào để cập nhật tài liệu con có điều kiện trong một trường mảng, theo thuộc tính cụ thể. Tuy nhiên, một thủ thuật nhỏ có thể thực hiện công việc bằng cách thực hiện hai lệnh liên tiếp.
Ví dụ:Nếu chúng tôi muốn cập nhật quizzes trường có đối tượng { "wk": 7.0, "score": 8.0 } , chúng ta có thể thực hiện theo hai bước:
Bước 1: $pull ra các tài liệu con từ quizzes mảng trong đó "wk": 7.0 . ( Không có gì xảy ra nếu không tìm thấy tài liệu phụ phù hợp ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Bước 2: $addToSet tài liệu phụ.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Bạn có thể kết hợp hai lệnh cập nhật ở trên bằng cách sử dụng bulk.find().update()