MongoDB-এ ডট নোটেশন এবং পজিশনাল অপারেটর ব্যবহার করে সাব-ডকুমেন্ট আপডেট
MongoDB-এ ডকুমেন্টের ভিতরে থাকা অ্যারে অবজেক্ট (সাব-ডকুমেন্ট) আপডেট করতে ডট নোটেশন কুয়েরিতে এবং পজিশনাল অপারেটর ($) আপডেটে ব্যবহার করা হয়।
উদাহরণ: স্কোর সহ ডিটেইলস অ্যারে তৈরি
> db.demo378.insertOne({ Name: 'Chris', details:[ {id:101,Score:56}, {id:102,Score:78} ] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a758a2ae06a1609a00b0f") }
আপডেট করার আগে
> db.demo378.find();
{ "_id" : ObjectId("5e5a758a2ae06a1609a00b0f"), "Name" : "Chris", "details" : [ { "id" : 101, "Score" : 56 }, { "id" : 102, "Score" : 78 } ] }
id=102 হলে Score ৮ কমানো ($inc ব্যবহার)
> db.demo378.update({Name: "Chris", "details.id":102 }, { $inc: { "details.$.Score": -8 } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেটের পর
> db.demo378.find();
{ "_id" : ObjectId("5e5a758a2ae06a1609a00b0f"), "Name" : "Chris", "details" : [ { "id" : 101, "Score" : 56 }, { "id" : 102, "Score" : 70 } ] }
ব্যাখ্যা
{Name: "Chris", "details.id":102}: কুয়েরি - Name="Chris" এবং details অ্যারেতে id=102 থাকা ডকুমেন্ট।details.$.Score:$হলো কুয়েরিতে ম্যাচ করা অ্যারে এলিমেন্টের (id=102) পজিশন।$inc: -8: Score ফিল্ড থেকে ৮ বিয়োগ (78 → 70)।
আধুনিক সিনট্যাক্স (arrayFilters)
db.demo378.updateOne(
{ Name: "Chris" },
{ $inc: { "details.$[elem].Score": -8 } },
{ arrayFilters: [ { "elem.id": 102 } ] }
)
সর্বোত্তম অনুশীলন: arrayFilters ব্যবহার করুন; এটি আরও পঠনীয়, একাধিক শর্ত সাপোর্ট করে এবং নেস্টেড লেভেলে কাজ করে।