শেল ফরইচ লুপ + $set
MongoDB-তে সরাসরি অ্যারে এলিমেন্ট আপডেট করার জন্য পজিশনাল অপারেটর $ ব্যবহার করা যায়, কিন্তু সব এলিমেন্ট আপডেট করতে শেল-এ forEach লুপ করে ডকুমেন্ট মডিফাই করে save() বা update() দিয়ে সেভ করা সহজ।
উদাহরণ: অ্যারে অফ অবজেক্টস সহ ডকুমেন্ট
> db.updateListOfKeyValuesDemo.insertOne({
"StudentDetails": [
{ "StudentName": "John", "StudentAge": 23, "StudentCountryName": "US" },
{ "StudentName": "Carol", "StudentAge": 24, "StudentCountryName": "UK" },
{ "StudentName": "Bob", "StudentAge": 22, "StudentCountryName": "AUS" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9b5b759882024390176545") }
আপডেট: সব StudentName "Ramit" করা
> var doc = db.updateListOfKeyValuesDemo.findOne({ "_id": ObjectId("5c9b5b759882024390176545") });
> doc.StudentDetails.forEach(function(item) {
item.StudentName = "Ramit";
});
> db.updateListOfKeyValuesDemo.update(
{ "_id": doc._id },
{ $set: { "StudentDetails": doc.StudentDetails } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ফাইনাল ডেটা
> db.updateListOfKeyValuesDemo.find().pretty();
আউটপুট: তিনটি এলিমেন্টের StudentName সব "Ramit" হয়েছে।
বিকল্প: Aggregation Pipeline Update (MongoDB 4.2+)
db.updateListOfKeyValuesDemo.updateMany(
{},
[{ $set: { "StudentDetails": { $map: { input: "$StudentDetails", as: "s", in: { $mergeObjects: ["$$s", { StudentName: "Ramit" }] } } } } }]
);
সারসংক্ষেপ: সিম্পল কেসের জন্য শেল forEach + save() সহজ; প্রোডাকশনে আটোমিক আপডেটের জন্য পাইপলাইন আপডেট বা arrayFilters ব্যবহার করুন।