MongoDB-এ অ্যারেতে নেস্টেড অবজেক্টের নির্দিষ্ট প্রপার্টির মান বাড়াতে (increment) update() মেথডে পজিশনাল $ অপারেটর এবং $inc ব্যবহার করা হয়।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo97.insertOne({
... "Details": [
... { "Name": "Chris", "Marks": 45 },
... { "Name": "Bob", "Marks": 88 }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d6d24b8903cdd865577af") }
সব ডকুমেন্ট দেখানো
>> db.demo97.find();
আউটপুট:
{ "_id" : ObjectId("5e2d6d24b8903cdd865577af"), "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "Bob", "Marks" : 88 } ] }
প্রপার্টি মান ইনক্রিমেন্ট করার কোয়ারী
Details.Name: "Bob" মিলে যাওয়া এলিমেন্টের Marks ১০ বাড়ানো হয়েছে:
> db.demo97.update(
... { "Details.Name": "Bob" },
... { $inc: { "Details.$.Marks" : 10 } }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেটের পর ডকুমেন্ট দেখানো
> db.demo97.find();
আউটপুট (Bob-এর Marks ৮৮ থেকে ৯৮ হয়েছে):
{ "_id" : ObjectId("5e2d6d24b8903cdd865577af"), "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "Bob", "Marks" : 98 } ] }
গুরুত্বপূর্ণ পয়েন্টসমূহ:
Details.$.Marks- এখানে$হলো পজিশনাল অপারেটর, যা কোয়ারীতে মিলে যাওয়া প্রথম অ্যারে এলিমেন্টকে নির্দেশ করে$inc- নির্দিষ্ট পরিমাণ বাড়াতে বা কমানোতে ব্যবহার করা হয় (নেগেটিভ মান দিলে কমে যাবে)- শুধু প্রথম মিলে যাওয়া এলিমেন্ট আপডেট হয়; সব এলিমেন্ট আপডেট করতে হলে
arrayFiltersব্যবহার করুন (MongoDB 3.6+)
আধুনিক পদ্ধতি (arrayFilters সহ):
db.demo97.updateOne(
{ "Details.Name": "Bob" },
{ $inc: { "Details.$[elem].Marks": 10 } },
{ arrayFilters: [ { "elem.Name": "Bob" } ] }
)