Để cập nhật một hoặc vài trường cụ thể trong tài liệu MongoDB mà **không làm mất các trường khác**, bạn **bắt buộc** phải dùng toán tử $set. Nếu không dùng $set, MongoDB sẽ thay thế toàn bộ tài liệu (replace), dẫn đến mất dữ liệu.
1. Tạo bộ sưu tập và chèn dữ liệu
> db.demo401.insertOne({
"_id": 1001,
"Name": "Chris",
"SubjectName": "MongoDB",
"Score": 45
});
{ "acknowledged": true, "insertedId": 1001 }
2. Xem dữ liệu ban đầu
> db.demo401.find();
Kết quả:
{ "_id": 1001, "Name": "Chris", "SubjectName": "MongoDB", "Score": 45 }
3. Cập nhật chỉ trường Score = 89 (dùng $set)
> db.demo401.update({ _id: 1001 }, { $set: { Score: 89 } });
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
4. Kết quả - Các trường khác giữ nguyên
> db.demo401.find();
Kết quả:
{ "_id": 1001, "Name": "Chris", "SubjectName": "MongoDB", "Score": 89 }
⚠️ Sai lầm thường gặp (KHÔNG LÀM NHƯ VẬY):
// SAI - Sẽ xóa Name, SubjectName, chỉ giữ _id và Score
db.demo401.update({ _id: 1001 }, { Score: 89 });
Phương thức hiện đại: Dùng updateOne() hoặc updateMany() thay cho update() (deprecated).
db.demo401.updateOne({ _id: 1001 }, { $set: { Score: 89 } });