MongoDB-তে $set ব্যবহার না করলে পুরো ডকুমেন্ট বা সাব-ডকুমেন্ট ওভাররাইট হয়ে যেতে পারে। নেস্টেড ফিল্ড আপডেট করতে ডট নোটেশন সাথে $set ব্যবহার করা বাধ্যতামূলক।
উদাহরণ: ইউজার ডিটেইলস (নেস্টেড অবজেক্ট)
> db.demo601.insertOne({ id: 1, userDetails: { userName: "John", userMailId: "John@gmail.com" } });
> db.demo601.insertOne({ id: 2, userDetails: { userName: "Carol", userMailId: "Carol@gmail.com" } });
ভুল পদ্ধতি (ওভাররাইট হয়):
> db.demo601.update(
{ _id: ObjectId("...") },
{ userMailId: "Carol@yahoo.com" } // $set নেই! পুরো ডকুমেন্ট রিপ্লেস হবে
);
সঠিক পদ্ধতি ($set + ডট নোটেশন):
> db.demo601.update(
{ _id: ObjectId("...") },
{ $set: { "userDetails.userMailId": "Carol@yahoo.com" } }
);
ফলাফল (সঠিক পদ্ধতিতে):
{ "id" : 2, "userDetails" : { "userName" : "Carol", "userMailId" : "Carol@gmail.com" }, "userMailId" : "Carol@yahoo.com" }
দ্রষ্টব্য: উদাহরণে ডট নোটেশন userDetails.userMailId ব্যবহার করা হয়েছে, কিন্তু আউটপুটে টপ-লেভেলে userMailId দেখা যাচ্ছে - এটি আসল আপডেটের ফলাফল নয়, বরং উদাহরণের টাইপো। সঠিক আউটপুটে userDetails.userMailId আপডেট হবে, টপ-লেভেলে নতুন ফিল্ড যোগ হবে না।
সেরা অনুশীলন: সবসময় $set ব্যবহার করুন, updateOne()/updateMany() ব্যবহার করুন (লিগ্যাসি update() ডিপ্রিকেটেড)।