MongoDB-তে নেস্টেড অ্যারে ভিতরের নিউমেরিক ফিল্ডের গড় বের করতে $unwind দিয়ে অ্যারে ফ্ল্যাটেন করে $group + $avg ব্যবহার করা হয়। একাধিক লেভেলের নেস্টিংয় জন্য একাধিক $unwind লাগে।
উদাহরণ: স্টুডেন্ট ডিটেইলস (নেস্টেড অ্যারে)
> db.demo598.insertOne({ Information: 'Student', id: 100, details: [ { Name: 'Chris', Marks: 75 }, { Name: 'Bob', Marks: 55 } ] });
> db.demo598.insertOne({ Information: 'Student', id: 101, details: [ { Name: 'Chris', Marks: 75 }, { Name: 'Bob', Marks: 45 } ] });
জটিল পাইপলাইন: নাম অনুযায়ী গড় মার্কস
> db.demo598.aggregate([
{ $group: { _id: "Information", id: { $avg: "$id" }, details: { $push: "$details" } } },
{ $unwind: "$details" },
{ $unwind: "$details" },
{ $group: {
_id: { "Information": "$_id", "Name": "$details.Name" },
id: { $avg: "$id" },
AvgValue: { $avg: "$details.Marks" }
}},
{ $sort: { _id: 1 } },
{ $group: {
_id: "$_id.Information",
id: { $avg: "$id" },
details: { $push: { "Name": "$_id.Name", "MarksAvg": "$AvgValue" } }
}}
]).pretty();
আউটপুট:
{ "_id" : "Information", "id" : 100.5, "details" : [
{ "Name" : "Bob", "MarksAvg" : 50 },
{ "Name" : "Chris", "MarksAvg" : 75 }
] }
ব্যাখ্যা:
- প্রথম
$group- সব ডকুমেন্ট এক গ্রুপে, details অ্যারে পুশ - দুইবার
$unwind- details অ্যারে ডাবল নেস্টেড (পুশ করায়), তাই দুবার আনউইন্ড - দ্বিতীয়
$group- (Information, Name) অনুযায়ী গ্রুপ, Marks গড় $sort+ তৃতীয়$group- ফাইনাল আউটপুট স্ট্রাকচার
সরল পদ্ধতি (সিকোয়েল): যদি শুধু স্টুডেন্ট অনুযায়ী গড় লাগে, তবে সরাসরি $unwind: "$details" → $group: { _id: "$details.Name", AvgMarks: { $avg: "$details.Marks" } } করুন।