কম্পিউটার টিউটোরিয়াল

MongoDB-এ সাব-ডকুমেন্ট ম্যানিপুলেট করা

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 ব্যবহার করুন; এটি আরও পঠনীয়, একাধিক শর্ত সাপোর্ট করে এবং নেস্টেড লেভেলে কাজ করে।

  1. MongoDB-তে সাবডকুমেন্টের অ্যারে কুয়েরি

  2. MongoDB-এ ডুপ্লিকেট নামের স্কোর যোগ করে ডিস্টিংক্ট জোড়া বের করা

  3. MongoDB-এ ডট নোটেশন ব্যবহার করে সাব-ডকুমেন্ট এক্সেস করা

  4. MongoDB-তে $push ব্যবহার করে সাব-ডকুমেন্ট যুক্ত করা (অ্যাপেন্ড)