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

MongoDB অ্যাগ্রিগেশনে নেস্টেড ফিল্ড গ্রুপ করে অ্যারেতে কাউন্ট ভ্যালু বের করা

MongoDB-এ গভীর নেস্টেড (nested) স্ট্রাকচারের ফিল্ডগুলো গ্রুপ করে অ্যারেতে থাকা কাউন্ট ভ্যালুর যোগফল বের করতে $objectToArray, $unwind, $group স্টেজ ব্যবহার করা হয়।

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

> db.demo99.insertOne({
...   'Details': {
...     'X': { 'Values': [10,30,50], 'Number': 3 },
...     'Y': { 'Values': [1000, 180], 'Number': 2 }
...   }
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d91eab8903cdd865577b9") }
> db.demo99.insertOne({
...   'Details': {
...     'X': { 'Values': [100,300,500,6000], 'Number': 4 },
...     'Y': { 'Values': [10, 20, 60], 'Number': 3 }
...   }
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d927bb8903cdd865577ba") }

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

> db.demo99.find();

আউটপুট:

{ "_id" : ObjectId("5e2d91eab8903cdd865577b9"), "Details" : { "X" : { "Values" : [ 10, 30, 50 ], "Number" : 3 }, "Y" : { "Values" : [ 1000, 180 ], "Number" : 2 } } }
{ "_id" : ObjectId("5e2d927bb8903cdd865577ba"), "Details" : { "X" : { "Values" : [ 100, 300, 500, 6000 ], "Number" : 4 }, "Y" : { "Values" : [ 10, 20, 60 ], "Number" : 3 } } }

নেস্টেড ফিল্ড গ্রুপ করে কাউন্ট যোগফল বের করার কোয়ারী

> db.demo99.aggregate([
...   { $project: { Count: { $objectToArray: "$Details" } } },
...   { $unwind: "$Count" },
...   { $group: { _id: "$Count.k", count: { $sum: "$Count.v.Number" } } }
... ]);

ফলাফল

{ "_id" : "Y", "count" : 5 }
{ "_id" : "X", "count" : 7 }

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

  1. $objectToArray: "$Details" - অবজেক্টকে কি-ভ্যালু পেয়ার অ্যারে কনভার্ট করে: [{k: "X", v: {Values: [...], Number: 3}}, {k: "Y", v: {...}}]
  2. $unwind: "$Count" - অ্যারে ফ্ল্যাটেন করে, প্রতিটি কি-ভ্যালু পেয়ার আলাদা ডকুমেন্ট
  3. $group - _id: "$Count.k" (X বা Y) দিয়ে গ্রুপ, $sum: "$Count.v.Number" দিয়ে Number ফিল্ড যোগফল

গণনা:

  • X: ৩ + ৪ = ৭
  • Y: ২ + ৩ = ৫

ব্যবহার ক্ষেত্র: ডাইনামিক কি (dynamic keys) ওয়ালা অবজেক্ট প্রসেসিং, স্কিমা-লেস ডেটা এনালিসিস, মেটাডেটা অ্যাগ্রিগেশন।

সংশ্লিষ্ট অপারেটর: $arrayToObject - বিপরীত কাজ করে (কি-ভ্যালু অ্যারে থেকে অবজেক্ট বানায়)।

  1. MongoDB-এ অ্যারে আইটেম গণনা করার পদ্ধতি

  2. MongoDB অগরিগেশনে ম্যাক্স ভ্যালু সহ অ্যারে এলিমেন্ট ম্যাচ এবং গ্রুপ করা

  3. MongoDB-এ অ্যারে ফিল্ডে সব এলিমেন্ট ম্যাচ করা ($all অপারেটর)

  4. MongoDB এগ্রিগেশন: একাধিক ফিল্ড দিয়ে কাউন্ট করা