Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cập nhật tài liệu MongoDB mà không ghi đè (chỉ cập nhật trường cụ thể)

Để 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 } });