Để cập nhật tài liệu trong MongoDB, bạn sử dụng updateOne() (hoặc update() cũ) với 2 phần: **Filter** (điều kiện tìm) và **Update** (thay đổi, bắt buộc dùng $set để không ghi đè). Ví dụ cập nhật tên sinh viên có StudentId = 102.
1. Tạo bộ sưu tập sinh viên
> db.demo427.insertOne({ "StudentId": 101, "StudentName": "Chris Brown" });
> db.demo427.insertOne({ "StudentId": 102, "StudentName": "David Miller" });
> db.demo427.insertOne({ "StudentId": 103, "StudentName": "John Smith" });
> db.demo427.insertOne({ "StudentId": 104, "StudentName": "Carol Taylor" });
2. Xem dữ liệu
> db.demo427.find();
Kết quả: 4 sinh viên với Id 101-104.
3. Cập nhật StudentName của StudentId=102 thành "John Doe"
> db.demo427.updateOne(
{ "StudentId": 102 },
{ $set: { "StudentName": "John Doe" } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Giải thích:
- Filter
{ StudentId: 102 }xác định duy nhất 1 tài liệu. $setchỉ thay đổi StudentName, giữ nguyên StudentId, _id.- Dùng
updateOnevì StudentId unique (chỉ khớp 1).
4. Kết quả
> db.demo427.find();
Kết quả:
{ "_id": ObjectId("..."), "StudentId": 101, "StudentName": "Chris Brown" }
{ "_id": ObjectId("..."), "StudentId": 102, "StudentName": "John Doe" } // Đã đổi
{ "_id": ObjectId("..."), "StudentId": 103, "StudentName": "John Smith" }
{ "_id": ObjectId("..."), "StudentId": 104, "StudentName": "Carol Taylor" }
Best Practice: Luôn dùng updateOne/updateMany + $set. Tránh update() cũ và **không bao giờ** bỏ $set (sẽ replace toàn bộ doc).