MongoDB-এ ক্যাপড (Capped) কালেকশন - যা ফিক্সড সাইজ এবং ইনসারশন অর্ডার মেইনটেইন করে - তেও ফিল্ড আপডেট করা যায়, শর্ত হলো ডকুমেন্ট সাইজ বেড়া না যাবে। update() মেথড ব্যবহার করা হয়।
ক্যাপড কালেকশন তৈরি এবং ডকুমেন্ট ইনসার্ট
> db.createCollection("Demo112", { capped: true, size: 14, max: 3 });
{ "ok" : 1 }
> db.demo112.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ef47a9fd5fd66da21447e") }
> db.demo112.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ef47e9fd5fd66da21447f") }
> db.demo112.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ef4919fd5fd66da214480") }
ক্যাপড কালেকশন সেটিংস: size: 14 বাইট (খুব ছোট, ডেমো용), max: 3 - সর্বোচ্চ ৩টি ডকুমেন্ট। পুরনো ডকুমেন্ট অটো ডিলিট হয়ে যায়।
সব ডকুমেন্ট দেখানো
> db.demo112.find();
আউটপুট:
{ "_id" : ObjectId("5e2ef47a9fd5fd66da21447e"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ef47e9fd5fd66da21447f"), "Name" : "David" }
{ "_id" : ObjectId("5e2ef4919fd5fd66da214480"), "Name" : "David" }
ক্যাপড কালেকশনে ফিল্ড আপডেট
> db.demo112.update(
... {Name: "David"},
... {$set: {Name: "Robert"}},
... {multi: true}
... );
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
আপডেটের পর ডকুমেন্ট দেখানো
> db.demo112.find();
আউটপুট (দুইটি David → Robert):
{ "_id" : ObjectId("5e2ef47a9fd5fd66da21447e"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ef47e9fd5fd66da21447f"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2ef4919fd5fd66da214480"), "Name" : "Robert" }
ক্যাপড কালেকশনে আপডেটের সীমাবদ্ধতা:
- ডকুমেন্ট সাইজ বাড়ানো যায় না (নতুন ফিল্ড যোগ বা স্ট্রিং বড় করলে এরর হবে)
- ডকুমেন্ট সাইজ কমানো যায় (ফিল্ড ডিলিট বা স্ট্রিং ছোট করলে)
- উদাহরণে "David" (৫ ক্যারেক্টার) → "Robert" (৬ ক্যারেক্টার) - সাইজ বেড়েছে কিন্তু এই কেসে ডকুমেন্ট খুব ছোট (size: 14 বাইট লিমিট) হলে এরর দিতে পারে। ডেমোতে কাজ করছে কারণ প্যাডিং/ওভারহেড আছে।
আধুনিক পদ্ধতি:
db.demo112.updateMany({Name: "David"}, {$set: {Name: "Robert"}})
ক্যাপড কালেকশন ব্যবহারের ক্ষেত্র: লগিং, ক্যাশিং, রিয়েল-টাইম অ্যানালিটিক্স, মেট্রিক্স - যেখানে পুরানো ডেটা অটোমেটিক्ली এক্সপায়ার হোক।