MongoDB-এ ফিল্ডের বর্তমান মান ব্যবহার করে নতুন মান সেট করতে (যেমন স্ট্রিং ক্যাটেনেশন) find() + forEach() + update() কম্বিনেশন ব্যবহার করা হয়।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo115.insertOne({"LastName":"Brown"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2efe9bd8f64a552dae635a") }
সব ডকুমেন্ট দেখানো
> db.demo115.find();
আউটপুট:
{ "_id" : ObjectId("5e2efe9bd8f64a552dae635a"), "LastName" : "Brown" }
ফিল্ড আপডেট করার কোয়ারী (forEach ব্যবহার করে)
find() কার্সর দিয়ে ইটেরেট করে প্রতিটি ডকুমেন্টের জন্য update() কল করা হয়েছে:
> db.demo115.find({"LastName":"Brown"}).forEach(function(d) {
... db.demo115.update({_id: d._id}, {$set: {LastName: 'Hello ' + d.LastName}});
... });
আপডেটের পর ডকুমেন্ট দেখানো
> db.demo115.find();
আউটপুট (LastName: "Brown" → "Hello Brown"):
{ "_id" : ObjectId("5e2efe9bd8f64a552dae635a"), "LastName" : "Hello Brown" }
ব্যাখ্যা:
find({"LastName":"Brown"})- শর্ত অনুযায়ী ডকুমেন্ট খুঁজে বের করে.forEach(function(d) {...})- প্রতিটি ডকুমেন্টdভেরিয়েবলে পাওয়া যায়d._id- ডকুমেন্টের ইউনিক আইডিd.LastName- বর্তমান মান ("Brown")'Hello ' + d.LastName- স্ট্রিং ক্যাটেনেশন ("Hello Brown")$set: {LastName: ...}- শুধু LastName ফিল্ড আপডেট
আধুনিক এবং উন্নত পদ্ধতি (MongoDB 4.2+):
$set এ এক্সপ্রেশন (aggregation pipeline syntax) ব্যবহার করে একক অপারেশনে:
db.demo115.updateMany(
{ LastName: "Brown" },
[ { $set: { LastName: { $concat: ["Hello ", "$LastName"] } } } ]
)
এটি অটোমিক, দ্রুত, এবং অ্যাপ্লিকেশন লেভেল লুপ ছাড়া কাজ করে।
সতর্কতা: forEach পদ্ধতিতে কনকারেন্সি ইস্যু হতে পারে (অন্য প্রসেস ডকুমেন্ট মডিফাই করলে)। প্রোডাকশনে পাইপলাইন আপডেট (updateMany with aggregation pipeline) ব্যবহার করুন।