MongoDB-এ অ্যাল-পজিশনাল অপারেটর ($[]) দিয়ে অ্যারে-র সব এলিমেন্ট আপডেট করা
MongoDB 3.6+ ভার্সনে $[] (All Positional Operator) ব্যবহার করে একটি অ্যারে-র সব এলিমেন্ট একসাথে আপডেট করা যায়। এটি নেস্টেড অ্যারে-র জন্যও কাজ করে।
১. কালেকশন ও নমুনা ডেটা তৈরি
> db.demo324.insertOne({"ListOfValues":[10,20,30]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516349f8647eb59e562073") }
২. আপডেটের আগে ডকুমেন্ট
> db.demo324.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e516349f8647eb59e562073"), "ListOfValues" : [ 10, 20, 30 ] }
৩. $[] অপারেটর দিয়ে সব এলিমেন্ট "MongoDB" স্ট্রিং-এ পরিবর্তন
> db.demo324.update(
{ "ListOfValues": [10,20,30] },
{ $set: { "ListOfValues.$[]": "MongoDB" } },
{ upsert: true }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ব্যাখ্যা:
ListOfValues.$[]- অ্যারে-র সব এলিমেন্টকে ইন্ডিকেট করে।$set- প্রতিটি এলিমেন্টের নতুন মান সেট করে।upsert: true- ম্যাচ না করলে নতুন ডকুমেন্ট তৈরি করবে (এখানে ম্যাচ করলো)।
৪. আপডেটের পর ডকুমেন্ট
> db.demo324.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e516349f8647eb59e562073"), "ListOfValues" : [ "MongoDB", "MongoDB", "MongoDB" ] }
অ্যারে-র তিনটি সংখ্যাগত মান (10, 20, 30) সব গুলো "MongoDB" স্ট্রিং-এ রূপান্তরিত হয়েছে।
তুলনা:
$(সিংগল পজিশনাল) - কোয়েরি ম্যাচ করা প্রথম এলিমেন্ট আপডেট করে।$[](অ্যাল পজিশনাল) - অ্যারে-র সব এলিমেন্ট আপডেট করে।$[(ফিল্টারড পজিশনাল) - নির্দিষ্ট শর্ত পূরণকারী এলিমেন্টগুলো আপডেট করে (arrayFilters দিয়ে)।]