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

Cập nhật tất cả document trong MongoDB với updateMany()

Phương thức updateMany() (MongoDB 3.2+) cập nhật **tất cả** document khớp với filter. Dùng filter rỗng {} để cập nhật toàn bộ collection.

Cú pháp

db.collection.updateMany(
    {  },           // {} = tất cả document
    { : { ... } },
    { upsert: false, writeConcern: ..., collation: ... } // options
)

Ví dụ: Đổi tên trường (Rename Field) cho tất cả document

Tạo collection updateManyDocumentsDemo:

> db.updateManyDocumentsDemo.insertOne({ "StudentName": "John", "StudentLastName": "Smith" });
> db.updateManyDocumentsDemo.insertOne({ "StudentName": "John", "StudentLastName": "Doe" });
> db.updateManyDocumentsDemo.insertOne({ "StudentName": "Carol", "StudentLastName": "Taylor" });
> db.updateManyDocumentsDemo.insertOne({ "StudentName": "David", "StudentLastName": "Miller" });

Hiển thị:

> db.updateManyDocumentsDemo.find().pretty();

Kết quả:

{ "_id" : ..., "StudentName" : "John", "StudentLastName" : "Smith" }
{ "_id" : ..., "StudentName" : "John", "StudentLastName" : "Doe" }
{ "_id" : ..., "StudentName" : "Carol", "StudentLastName" : "Taylor" }
{ "_id" : ..., "StudentName" : "David", "StudentLastName" : "Miller" }

Cập nhật: Đổi tên field "StudentName" -> "StudentFirstName"

> db.updateManyDocumentsDemo.updateMany({}, { $rename: { 'StudentName': "StudentFirstName" } });

Kết quả:

{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Kiểm tra:

> db.updateManyDocumentsDemo.find().pretty();

Kết quả:

{ "_id" : ..., "StudentLastName" : "Smith", "StudentFirstName" : "John" }
{ "_id" : ..., "StudentLastName" : "Doe", "StudentFirstName" : "John" }
{ "_id" : ..., "StudentLastName" : "Taylor", "StudentFirstName" : "Carol" }
{ "_id" : ..., "StudentLastName" : "Miller", "StudentFirstName" : "David" }

Các update operator phổ biến cho updateMany

OperatorMục đíchVí dụ
$setGán giá trị mới / thêm field{ $set: { status: "active", updatedAt: new Date() } }
$unsetXóa field{ $unset: { tempField: "" } }
$incTăng/giảm số{ $inc: { viewCount: 1 } }
$mulNhân số{ $mul: { price: 1.1 } }
$renameĐổi tên field{ $rename: { oldName: "newName" } }
$currentDateSet timestamp hiện tại{ $currentDate: { lastModified: true } }

Lưu ý quan trọng

  • Atomic per document: Mỗi document cập nhật riêng biệt, không phải transaction toàn collection (trừ khi dùng multi-document transaction).
  • Write Concern: Mặc định w: 1. Với dữ liệu quan trọng, dùng { writeConcern: { w: "majority" } }.
  • Upsert: upsert: true sẽ insert mới nếu không khớp document nào (với filter {} thì luôn khớp -> không bao giờ upsert).
  • Rollback: Không thể rollback updateMany. Hãy backup hoặc test trên staging trước.