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. $setchỉ cập nhật trường Name, giữ nguyên các trường khác.upsert: truesẽ 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+).