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

Cập nhật trường trong Capped Collection MongoDB

Capped Collection (collection giới hạn dung lượng) vẫn hỗ trợ update document, miễn là kích thước document không tăng lên sau update.

Tạo Capped Collection

> db.createCollection("Demo112", { capped: true, size: 14, max: 3 });
{ "ok" : 1 }

size: 14 bytes (rất nhỏ, chỉ demo), max: 3 document tối đa.

Chèn dữ liệu

> db.demo112.insertOne({"Name":"Chris"});
> db.demo112.insertOne({"Name":"David"});
> db.demo112.insertOne({"Name":"David"});

Cập nhật Name="David" → "Robert"

> db.demo112.update(
    {Name:"David"}, 
    {$set:{Name: "Robert"}}, 
    {multi:true}
);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

Kết quả

{ "_id" : ObjectId("5e2ef47a9fd5fd66da21447e"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ef47e9fd5fd66da21447f"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2ef4919fd5fd66da214480"), "Name" : "Robert" }

Quy tắc quan trọng cho Capped Collection:

  • ✅ Được phép: Update trường không làm tăng size document (rename, sửa giá trị cùng kích thước)
  • ❌ Không được: $push, $addToSet, $set làm tăng kích thước document
  • ❌ Không được: Xóa document riêng lẻ (chỉ xóa hết collection hoặc đợi tự động evict khi đầy)
  • ✅ Được phép: Tạo index (trừ _id đã có sẵn)

Ví dụ này thành công vì "David" (5 chars) → "Robert" (6 chars) - tăng 1 byte, nhưng trong demo size=14 bytes rất nhỏ nên MongoDB cho phép (padding). Production cần cẩn trọng.