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

MongoDB অ্যাগ্রিগেশন: নেস্টেড অ্যারে এলিমেন্টের গড় (Average) বের করা ($avg + $unwind)

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 }
] }

ব্যাখ্যা:

  1. প্রথম $group - সব ডকুমেন্ট এক গ্রুপে, details অ্যারে পুশ
  2. দুইবার $unwind - details অ্যারে ডাবল নেস্টেড (পুশ করায়), তাই দুবার আনউইন্ড
  3. দ্বিতীয় $group - (Information, Name) অনুযায়ী গ্রুপ, Marks গড়
  4. $sort + তৃতীয় $group - ফাইনাল আউটপুট স্ট্রাকচার

সরল পদ্ধতি (সিকোয়েল): যদি শুধু স্টুডেন্ট অনুযায়ী গড় লাগে, তবে সরাসরি $unwind: "$details" → $group: { _id: "$details.Name", AvgMarks: { $avg: "$details.Marks" } } করুন।

  1. MongoDB-এ ডকুমেন্ট থেকে অ্যারে ভ্যালু ডিলিট করা

  2. MongoDB-এ ডকুমেন্ট থেকে ইমেইল আইডি বের করে print() দিয়ে দেখানো

  3. MongoDB-তে অ্যাগ্রিগেশন দিয়ে অ্যারে এলিমেন্টের গড় (Average) বের করা ($avg)

  4. MongoDB ডকুমেন্টের নির্দিষ্ট ফিল্ড থেকে অ্যারে এলিমেন্ট কাউন্ট করা