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,$setlà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.