MongoDB-এ গভীর নেস্টেড ডকুমেন্ট এবং অ্যারে স্ট্রাকচার থেকে ডেটা এক্সট্রাক্ট এবং অ্যাগ্রিগেট করতে একাধিক $unwind স্টেজ ব্যবহার করে স্ট্রাকচার ফ্ল্যাটেন করা হয়, তারপর $group বা অন্যান্য অপারেটর প্রয়োগ করা হয়।
নমুনা কালেকশন তৈরি (জটিল নেস্টেড স্ট্রাকচার)
> db.aggregateDemo.insertOne({
"ProductInformation": [
{ "Product1": [ { "Amount": 50 }, { "Amount": 90 }, { "Amount": 30 } ] },
{ "Product1": [ { "Amount": 200 }, { "Amount": 30 }, { "Amount": 40 } ] },
{ "Product1": [ { "Amount": 150 }, { "Amount": 190 }, { "Amount": 198 } ] }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e04df58150ee0e76c06a04d") }
> db.aggregateDemo.insertOne({
"ProductInformation": [
{ "Product1": [ { "Amount": 100 }, { "Amount": 1002 }, { "Amount": 78 } ] },
{ "Product1": [ { "Amount": 75 }, { "Amount": 400 }, { "Amount": 600 } ] },
{ "Product1": [ { "Amount": 700 }, { "Amount": 500 }, { "Amount": 600 } ] }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e04df93150ee0e76c06a04e") }
ডকুমেন্টগুলো দেখানো
> db.aggregateDemo.find().pretty();
প্রতিটি ডকুমেন্টে ProductInformation অ্যারে আছে, তার ভেতর প্রতিটি এলিমেন্টে Product1 অ্যারে, এবং তার ভেতর Amount ফিল্ড।
নেস্টেড ডকুমেন্ট অ্যাগ্রিগেট (সর্বোচ্চ Amount বের করা)
> db.aggregateDemo.aggregate([
{ $unwind: "$ProductInformation" },
{ $unwind: "$ProductInformation.Product1" },
{
$group: {
_id: null,
MaximumAmount: { $max: "$ProductInformation.Product1.Amount" }
}
}
]);
ফলাফল
{ "_id": null, "MaximumAmount": 1002 }
ব্যাখ্যা:
- ১ম $unwind:
ProductInformationঅ্যারে ফ্ল্যাটেন করে - প্রতিটি সাব-ডকুমেন্ট আলাদা ডকুমেন্টে রূপান্তর। - ২য় $unwind:
ProductInformation.Product1অ্যারে ফ্ল্যাটেন করে - প্রতিটি Amount অবজেক্ট আলাদা ডকুমেন্টে। - $group: সব ডকুমেন্ট একসাথে গ্রুপ করে (
_id: null)$maxদিয়ে সর্বোচ্চ Amount বের করে। - সর্বোচ্চ Amount হলো ১০০২ (দ্বিতীয় ডকুমেন্টের প্রথম Product1-এ)।
অন্যান্য অ্যাগ্রিগেশন উদাহরণ
- সর্বোচ্চ:
$max - সর্বনিম্ন:
$min - গড়:
$avg - যোগফল:
$sum - গণনা:
$sum: 1