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

Cập nhật lương nhân viên tăng 10% trong MongoDB

Để cập nhật một trường số bằng cách **nhân với một hệ số** (ví dụ: tăng lương 10% = nhân 1.1), MongoDB cung cấp toán tử $mul (multiply). Toán tử này thay đổi giá trị tại chỗ (in-place), atomic, và hiệu quả hơn nhiều so với đọc -> tính -> ghi.

1. Tạo bộ sưu tập nhân viên

> db.demo417.insertOne({ "EmployeeName": "Chris", "EmployeeSalary": 500 });
> db.demo417.insertOne({ "EmployeeName": "Mike", "EmployeeSalary": 1000 });

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

> db.demo417.find();

Kết quả: Chris 500, Mike 1000.

3. Tăng lương 10% cho Chris và Mike (dùng $mul + $in + multi:true)

> db.demo417.update(
    { "EmployeeName": { $in: ["Chris", "Mike"] } },
    { $mul: { EmployeeSalary: 1.1 } },
    { multi: true }
);
WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 2 })

Giải thích:

  • Filter: $in chọn 2 nhân viên.
  • $mul: { EmployeeSalary: 1.1 }: Nhân trường EmployeeSalary với 1.1.
  • multi: true: Áp dụng cho tất cả tài liệu khớp (cũ, dùng updateMany hiện nay).

4. Kết quả

> db.demo417.find();

Kết quả:

{ "_id": ObjectId("..."), "EmployeeName": "Chris", "EmployeeSalary": 550 }
{ "_id": ObjectId("..."), "EmployeeName": "Mike", "EmployeeSalary": 1100 }

Cách hiện đại (MongoDB 3.2+):

db.demo417.updateMany(
    { "EmployeeName": { $in: ["Chris", "Mike"] } },
    { $mul: { EmployeeSalary: 1.1 } }
);

Các toán tử cập nhật số học khác: $inc (cộng/trừ), $min, $max (giới hạn min/max).