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

Cập nhật chỉ 1 document MongoDB với updateOne() không xóa dữ liệu

Để 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ần multi: 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:

Luôn dùng $set để tránh xóa mất trường khác trong document.

Phương thứcSố doc cập nhậtThay thế hay sửa?Ghi chú
updateOne1Sửa ($set)Khuyến nghị
updateManyNhiềuSửa ($set)Khuyến nghị
replaceOne1Thay thế toàn bộCần _id hoặc filter duy nhất
findOneAndUpdate1Sửa + trả về docAtomic, tùy chọn returnNewDocument