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

Cách thực hiện cập nhật có điều kiện (conditional update) trong MongoDB

Cập nhật có điều kiện trong MongoDB nghĩa là chỉ cập nhật tài liệu khi thỏa mãn điều kiện nhất định. Điều này thực hiện rất tự nhiên bằng cách đặt điều kiện trong phần filter (tham số đầu tiên) của updateOne(), updateMany() hoặc update().

1. Tạo bộ sưu tập và chèn dữ liệu

> db.demo402.insertOne({ id: 101, "Name": "Chris" });
> db.demo402.insertOne({ id: 102, "Name": "David" });
> db.demo402.insertOne({ id: 103, "Name": "Mike" });

2. Xem dữ liệu ban đầu

> db.demo402.find();

Kết quả:

{ "_id": ObjectId("..."), "id": 101, "Name": "Chris" }
{ "_id": ObjectId("..."), "id": 102, "Name": "David" }
{ "_id": ObjectId("..."), "id": 103, "Name": "Mike" }

3. Cập nhật có điều kiện: Chỉ đổi Name thành "Robert" khi id = 102

> db.demo402.update(
    { id: 102 },
    { $set: { Name: "Robert" } },
    { upsert: true }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

Giải thích:

  • Filter { id: 102 } chính là điều kiện.
  • $set chỉ cập nhật trường Name, giữ nguyên các trường khác.
  • upsert: true sẽ tạo mới nếu không tìm thấy (không xảy ra ở đây).

4. Kết quả

> db.demo402.find();

Kết quả:

{ "_id": ObjectId("..."), "id": 101, "Name": "Chris" }
{ "_id": ObjectId("..."), "id": 102, "Name": "Robert" }
{ "_id": ObjectId("..."), "id": 103, "Name": "Mike" }

Mở rộng: Để cập nhật phức tạp hơn (ví dụ: tăng giá trị chỉ khi giá trị hiện tại < 100), dùng updateMany() với filter phức hợp hoặc Aggregation Pipeline trong update (MongoDB 4.2+).