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

Cách cập nhật bản ghi trong MongoDB

Cập nhật tài liệu trong MongoDB dựa trên _id

Cách cơ bản và an toàn nhất: dùng updateOne() (hoặc update() cũ) với filter trên _id và toán tử $set.

1. Dữ liệu mẫu

> db.demo458.insertOne({ _id: 101, "Name": "David" });
> db.demo458.insertOne({ _id: 102, "Name": "Chris" });
> db.demo458.insertOne({ _id: 103, "Name": "Bob" });

2. Cập nhật Name của _id: 102

> db.demo458.update({ _id: 102 }, { $set: { "Name": "David Miller" } });
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

3. Kết quả

> db.demo458.find();
{ "_id": 101, "Name": "David" }
{ "_id": 102, "Name": "David Miller" }
{ "_id": 103, "Name": "Bob" }

Các phương thức cập nhật hiện đại (MongoDB 3.2+)

Phương thứcMô tảTrả về
updateOne(filter, update)Cập nhật 1 doc khớp filter{ acknowledged, matchedCount, modifiedCount }
updateMany(filter, update)Cập nhật TẤT CẢ doc khớpGiống updateOne
replaceOne(filter, replacement)Thay thế toàn bộ doc (giữ _id)Giống updateOne
findOneAndUpdate(filter, update)Cập nhật VÀ trả về doc (trước/sau)Tài liệu (document)

Ví dụ updateOne() hiện đại

db.demo458.updateOne(
    { _id: 102 },
    { $set: { "Name": "David Miller", "UpdatedAt": new Date() } }
);

Toán tử cập nhật thường dùng

  • $set: Gán giá trị (tạo mới nếu chưa có)
  • $unset: Xóa trường
  • $inc: Tăng/giảm số
  • $push/$pull: Thêm/xóa phần tử mảng
  • $rename: Đổi tên trường
  • $currentDate: Cập nhật timestamp

Best practice: Luôn filter bằng _id (hoặc unique index) để tránh cập nhật nhầm nhiều tài liệu.