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 }
স্টেপ বাই স্টেপ ব্যাখ্যা:
$objectToArray: "$Details"- অবজেক্টকে কি-ভ্যালু পেয়ার অ্যারে কনভার্ট করে:[{k: "X", v: {Values: [...], Number: 3}}, {k: "Y", v: {...}}]$unwind: "$Count"- অ্যারে ফ্ল্যাটেন করে, প্রতিটি কি-ভ্যালু পেয়ার আলাদা ডকুমেন্ট$group-_id: "$Count.k"(X বা Y) দিয়ে গ্রুপ,$sum: "$Count.v.Number"দিয়ে Number ফিল্ড যোগফল
গণনা:
- X: ৩ + ৪ = ৭
- Y: ২ + ৩ = ৫
ব্যবহার ক্ষেত্র: ডাইনামিক কি (dynamic keys) ওয়ালা অবজেক্ট প্রসেসিং, স্কিমা-লেস ডেটা এনালিসিস, মেটাডেটা অ্যাগ্রিগেশন।
সংশ্লিষ্ট অপারেটর: $arrayToObject - বিপরীত কাজ করে (কি-ভ্যালু অ্যারে থেকে অবজেক্ট বানায়)।