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

MongoDB-এ ডিকশনারি (অবজেক্ট) লিস্টের ভ্যালুগুলো যোগফল (Sum) করা সব ডকুমেন্টের জন্য

MongoDB-এ অ্যারেতে নেস্টেড অবজেক্ট (ডিকশনারি) এর সংখ্যাসূচক ফিল্ডগুলোর যোগফল (sum) সব ডকুমেন্টের জন্য বের করতে $unwind এবং $group স্টেজ ব্যবহার করা হয়।

কলেকশন এবং ডকুমেন্ট তৈরি

> db.demo117.insertOne({
...   ID: 101,
...   Details: [
...     { Name: 'Chris', Value1: 20, Value2: 30, Value3: 10 },
...     { Name: 'David', Value1: 10, Value2: 50, Value3: 30 }
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f02ced8f64a552dae6361") }
> db.demo117.insertOne({
...   ID: 102,
...   Details: [
...     { Name: 'Chris', Value1: 20, Value2: 10, Value3: 20 },
...     { Name: 'David', Value1: 30, Value2: 40, Value3: 10 }
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f02ced8f64a552dae6362") }

সব ডকুমেন্ট দেখানো

> db.demo117.find();

আউটপুট:

{ "_id" : ObjectId("5e2f02ced8f64a552dae6361"), "ID" : 101, "Details" : [ { "Name" : "Chris", "Value1" : 20, "Value2" : 30, "Value3" : 10 }, { "Name" : "David", "Value1" : 10, "Value2" : 50, "Value3" : 30 } ] }
{ "_id" : ObjectId("5e2f02ced8f64a552dae6362"), "ID" : 102, "Details" : [ { "Name" : "Chris", "Value1" : 20, "Value2" : 10, "Value3" : 20 }, { "Name" : "David", "Value1" : 30, "Value2" : 40, "Value3" : 10 } ] }

যোগফল বের করার কোয়ারী

$unwind দিয়ে Details অ্যারে ফ্ল্যাটেন, তারপর $group দিয়ে Name অনুযায়ী গ্রুপ করে প্রতিটি Value ফিল্ডের যোগফল:

> db.demo117.aggregate([
...   { $unwind: "$Details" },
...   { $group: {
...     _id: "$Details.Name",
...     "Value1": { $sum: "$Details.Value1" },
...     "Value2": { $sum: "$Details.Value2" },
...     "Value3": { $sum: "$Details.Value3" }
...   }}
... ]);

ফলাফল

{ "_id" : "David", "Value1" : 40, "Value2" : 90, "Value3" : 40 }
{ "_id" : "Chris", "Value1" : 40, "Value2" : 40, "Value3" : 30 }

গণনা যাচাই:

  • Chris: Value1: 20+20=40, Value2: 30+10=40, Value3: 10+20=30
  • David: Value1: 10+30=40, Value2: 50+40=90, Value3: 30+10=40

স্টেপ বাই স্টেপ ব্যাখ্যা:

  1. $unwind: "$Details" - প্রতিটি ডকুমেন্টের Details অ্যারের এলিমেন্ট আলাদা ডকুমেন্ট বানায় (মোট ৪টি ডকুমেন্ট)
  2. $group - _id: "$Details.Name" দিয়ে নাম অনুযায়ী গ্রুপ, প্রতিটি Value ফিল্ডের $sum নিয়ে যোগফল

বিকল্প: মাল্টিপল ফিল্ড ডাইনামিকভাবে যোগ করতে (MongoDB 4.4+):

db.demo117.aggregate([
  { $unwind: "$Details" },
  { $group: {
    _id: "$Details.Name",
    sums: { $push: { k: "Value1", v: "$Details.Value1" } } // repetitive, better explicit
  }}
])

স্পষ্ট ফিল্ড লিখতাই ভালো পারফরম্যান্স এবং পঠনযোগ্যতার জন্য।

  1. MongoDB-তে লিস্ট থেকে মান (অবজেক্ট নয়) কুয়েরি করা

  2. MongoDB-এ ডুপ্লিকেট কলাম ভ্যালু 가진 ডকুমেন্টের স্কোর যোগ করা

  3. MongoDB অ্যাগ্রিগেশন দিয়ে সব ডকুমেন্ট জুড়ে ডISTINCT মান গণনা করা

  4. MongoDB ডকুমেন্ট থেকে নাল ভ্যালু বাদ দেওয়া