MongoDB-এ update() এবং save()-র পারফরম্যান্স তুলনা
MongoDB-এ ডকুমেন্ট আপডেট করার সবচেয়ে দ্রুত এবং কার্যকর পদ্ধতি হলো update() (বা আধুনিক ভার্সনে updateOne()/updateMany())। save() মেথড পুরনো এবং কম দক্ষ।
১. কালেকশন ও নমুনা ডেটা তৈরি
> db.demo320.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee51f8647eb59e562066") }
> db.demo320.insertOne({"Name":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee55f8647eb59e562067") }
> db.demo320.insertOne({"Name":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee59f8647eb59e562068") }
> db.demo320.insertOne({"Name":"Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee5bf8647eb59e562069") }
২. আপডেটের আগে ডকুমেন্টগুলো
> db.demo320.find();
আউটপুট:
{ "_id" : ObjectId("5e50ee51f8647eb59e562066"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50ee55f8647eb59e562067"), "Name" : "Robert" }
{ "_id" : ObjectId("5e50ee59f8647eb59e562068"), "Name" : "Mike" }
{ "_id" : ObjectId("5e50ee5bf8647eb59e562069"), "Name" : "Sam" }
৩. update() ব্যবহার করে "Mike" কে "Bob" বানানো
> db.demo320.update({Name:"Mike"},{$set:{Name:"Bob"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ব্যাখ্যা:
{Name:"Mike"}- ফিল্টার (কোন ডকুমেন্ট আপডেট হবে)।{$set:{Name:"Bob"}}- শুধু Name ফিল্ড আপডেট করবে, অন্যান্য ফিল্ড অপরিবর্তিত থাকবে।WriteResult-nModified: 1মানে ১টি ডকুমেন্ট পরিবর্তন হয়েছে।
৪. আপডেটের পর ডকুমেন্টগুলো
> db.demo320.find();
আউটপুট:
{ "_id" : ObjectId("5e50ee51f8647eb59e562066"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50ee55f8647eb59e562067"), "Name" : "Robert" }
{ "_id" : ObjectId("5e50ee59f8647eb59e562068"), "Name" : "Bob" }
{ "_id" : ObjectId("5e50ee5bf8647eb59e562069"), "Name" : "Sam" }
কেন update() দ্রুত?
- Partial Update:
$setব্যবহার করে শুধু নির্দিষ্ট ফিল্ড আপডেট হয়, পুরো ডকুমেন্ট রি-রাইট হয় না। - In-Place Update: ডকুমেন্ট আকার না বড়ালে ইন-প্লেস আপডেট হয়।
- save() পুরো ডকুমেন্ট রিপ্লেস করে (Remove + Insert), যা ধীর এবং _id পরিবর্তন হলে নতুন ডকুমেন্ট তৈরি করে।
সুপারিশ: আধুনিক MongoDB ড্রাইভারে updateOne(), updateMany(), findOneAndUpdate() ব্যবহার করুন।