MongoDB-এ একটি অ্যারেতে নির্দিষ্ট মান খুঁজে সেটি অন্য মান দিয়ে রিপ্লেস (replace) করার জন্য $set অপারেটর সহ পজিশনাল $ (Positional $) অপারেটর ব্যবহার করা হয়। পজিশনাল $ কুয়েরিতে ম্যাচ হওয়া অ্যারে এলিমেন্টের পজিশন নির্দেশ করে।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo564.insertOne({"StudentName": ["Chris", "David", "Mike", "Sam"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e90880a39cfeaaf0b97b576") }
সব ডকুমেন্ট দেখানো
> db.demo564.find().pretty();
আউটপুট:
{
"_id" : ObjectId("5e90880a39cfeaaf0b97b576"),
"StudentName" : [ "Chris", "David", "Mike", "Sam" ]
}
"David" কে "Carol Taylor" দিয়ে রিপ্লেস করা
> db.demo564.updateMany(
{ "StudentName": "David" },
{ "$set": { "StudentName.$": "Carol Taylor" } }
);
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
কোয়েরির ব্যাখ্যা
{ "StudentName": "David" }— ফিল্টার: যেসব ডকুমেন্টেStudentNameঅ্যারেতে "David" আছে।{ "$set": { "StudentName.$": "Carol Taylor" } }—$(পজিশনাল) কুয়েরিতে ম্যাচ হওয়া এলিমেন্টের ইনডেক্স নির্দেশ করে (এখানে ইনডেক্স ১)। শুধু সেই এলিমেন্ট আপডেট হয়।updateMany()— সব মিলে যাওয়া ডকুমেন্ট আপডেট করে (এখানে ১টি ডকুমেন্ট)۔
আপডেটের পর ডকুমেন্ট দেখানো
> db.demo564.find().pretty();
আউটপুট:
{
"_id" : ObjectId("5e90880a39cfeaaf0b97b576"),
"StudentName" : [ "Chris", "Carol Taylor", "Mike", "Sam" ]
}
মূল পয়েন্টসমূহ
- পজিশনাল $ কুয়েরিতে ম্যাচ হওয়া প্রথম এলিমেন্টকে আপডেট করে। একাধিক ম্যাচ হলে শুধু প্রথমটি।
- স্ট্রিং অ্যারে (array of strings) এ ডট নোটেশন
StudentName.$কাজ করে। - অবজেক্ট অ্যারে (array of objects) এ:
{ $set: { "arr.$.field": value } }। - সব ম্যাচ হওয়া এলিমেন্ট আপডেট করতে
arrayFilters(MongoDB 3.6+) ব্যবহার করুন। updateOne()শুধু প্রথম ডকুমেন্ট আপডেট করে;updateMany()সব ডকুমেন্ট।