Để cập nhật chính xác 1 document, sử dụng updateOne() với bộ lọc (filter) và toán tử $set để chỉ thay đổi trường cần thiết.
Tạo collection dữ liệu
> db.demo495.insertOne({"FirstName":"Chris","Age":19});
> db.demo495.insertOne({"FirstName":"David","Age":21});
> db.demo495.insertOne({"FirstName":"Bob","Age":26});
> db.demo495.insertOne({"FirstName":"John","Age":22});
Hiển thị trước khi cập nhật
> db.demo495.find();
Kết quả: 4 document
Cập nhật Age của David từ 21 thành 23
> db.demo495.updateOne(
{"FirstName": "David"},
{$set: {"Age": 23}}
);
{ "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }
Kết quả sau cập nhật
> db.demo495.find();
Kết quả (chỉ David thay đổi):
Chris 19 | David 23 | Bob 26 | John 22
Giải thích:
updateOne(filter, update): Chỉ cập nhật **document đầu tiên** khớp filter$set: Chỉ sửa đổi các trường chỉ định, **giữ nguyên các trường khác**- Khác với
update()cũ (cầnmulti: trueđể cập nhật nhiều) vàreplaceOne()(thay thế toàn bộ document) - Kết quả trả về:
matchedCount(số doc khớp),modifiedCount(số doc thực sự thay đổi)
So sánh các phương thức cập nhật:
| Phương thức | Số doc cập nhật | Thay thế hay sửa? | Ghi chú |
|---|---|---|---|
| updateOne | 1 | Sửa ($set) | Khuyến nghị |
| updateMany | Nhiều | Sửa ($set) | Khuyến nghị |
| replaceOne | 1 | Thay thế toàn bộ | Cần _id hoặc filter duy nhất |
| findOneAndUpdate | 1 | Sửa + trả về doc | Atomic, tùy chọn returnNewDocument |