টেস্ট স্কোর গড়ের সাথে তুলনা করে ছাত্র বের করা
সব টেস্টের গড় স্কোর বের করে, যাদের প্রথম টেস্টের স্কোর (Value1) সেটির চেয়ে কম তাদের নাম খুঁজে বের করতে অ্যাগ্রিগেশন ফ্রেমওয়ার্ক ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
> db.demo432.insertOne({ "_id": 101, "Name": "David", "Value1": 67, "Value2": 87, "Value3": 78 })
> db.demo432.insertOne({ "_id": 102, "Name": "Sam", "Value1": 98, "Value2": 45, "Value3": 90 })
সমস্ত ডকুমেন্ট দেখানো
> db.demo432.find()
আউটপুট:
{ "_id": 101, "Name": "David", "Value1": 67, "Value2": 87, "Value3": 78 }
{ "_id": 102, "Name": "Sam", "Value1": 98, "Value2": 45, "Value3": 90 }
কোয়েরি: প্রথম টেস্ট স্কোর গড়ের চেয়ে কম হলে
> db.demo432.aggregate([
{ $project: {
Name: "$Name",
Value1: "$Value1",
average: { $avg: ["$Value1", "$Value2", "$Value3"] }
}},
{ $group: {
_id: null,
NameValue1: { $push: { "Name": "$Name", "Value1": "$Value1" } },
totalAverage: { $avg: "$average" }
}},
{ $project: {
lessthanAverageNames: {
$map: {
input: {
$filter: {
input: "$NameValue1",
as: "out",
cond: { $lt: ["$$out.Value1", "$totalAverage"] }
}
},
as: "o",
in: "$$o.Name"
}
}
}}
])
ফলাফল:
{ "_id": null, "lessthanAverageNames": ["David"] }
ব্যাখ্যা
- $project (প্রথমটি): প্রতিটি ডকুমেন্টের তিনটি ভ্যালুর গড় (
average) বের করে - $group: সব ডকুমেন্ট একসাথে গ্রুপ করে সবার গড় (
totalAverage) এবং নাম-ভ্যালু পেয়ার সংরক্ষণ করে - $project (দ্বিতীয়টি):
$filterদিয়ে যাদের Value1 মোট গড়ের চেয়ে কম তাদের ছান্নি করে, তারপর$mapদিয়ে শুধু নামগুলো রিটার্ন করে
দাবিড়ের Value1 (67) তিনটি টেস্টের মোট গড়ের চেয়ে কম, তাই শুধু তার নাম ফলাফলে আসে।