MongoDB-তে অ্যারে এলিমেন্ট ম্যাচ এবং গ্রুপ করতে $group এবং $max ব্যবহার করুন। একটি কালেকশন তৈরি করুন নেস্টেড অ্যারে ডকুমেন্টের সাথে:
> db.demo510.insertOne({
details:[
{ Name:"Chris", Score:56 },
{ Name:"David", Score:45 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8845fa987b6e0e9d18f582") }
> db.demo510.insertOne({
details:[
{ Name:"Chris", Score:56 },
{ Name:"David", Score:47 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8845fb987b6e0e9d18f583") }
> db.demo510.insertOne({
details:[
{ Name:"Chris", Score:45 },
{ Name:"David", Score:91 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8845fb987b6e0e9d18f584") }
find() দিয়ে সব ডকুমেন্ট দেখান:
> db.demo510.find();
আউটপুট:
{ "_id" : ObjectId("5e8845fa987b6e0e9d18f582"), "details" : [ { "Name" : "Chris", "Score" : 56 }, { "Name" : "David", "Score" : 45 } ] }
{ "_id" : ObjectId("5e8845fb987b6e0e9d18f583"), "details" : [ { "Name" : "Chris", "Score" : 56 }, { "Name" : "David", "Score" : 47 } ] }
{ "_id" : ObjectId("5e8845fb987b6e0e9d18f584"), "details" : [ { "Name" : "Chris", "Score" : 45 }, { "Name" : "David", "Score" : 91 } ] }
ম্যাক্স ভ্যালু সহ অ্যারে এলিমেন্ট ম্যাচ এবং গ্রুপ করার অগরিগেশন কোয়েরি:
> db.demo510.aggregate([
{ "$project": {
"details": {
"$arrayElemAt": [
{ "$filter": {
"input": "$details",
"as": "res",
"cond": {
"$eq": [
"$$res.Score",
{ "$max": {
"$map": {
"input": "$details",
"as": "out",
"in": "$$out.Score"
}
}}
]
}
}},
0
]
}
}},
{ "$group": {
"_id": "$details.Name",
"Name": { "$first": "$details.Name" },
"count": { "$sum": 1 }
}}
])
আউটপুট:
{ "_id" : "David", "Name" : "David", "count" : 1 }
{ "_id" : "Chris", "Name" : "Chris", "count" : 2 }
ব্যাখ্যা: এই জটিল অগরিগেশন পাইপলাইন প্রথমে $project এবং $filter ব্যবহার করে প্রতিটি ডকুমেন্টের details অ্যারেতে সর্বোচ্চ Score 가진 এলিমেন্টটি বের করে। তারপর $group দিয়ে নাম অনুযায়ী গ্রুপ করে কাউন্ট করে। Chris-এর দুটি ডকুমেন্টে সর্বোচ্চ স্কোর 56 ছিল, David-এর একটি ডকুমেন্টে 91 ছিল।