MongoDB-তে নেস্টেড অ্যারে থেকে নাম এবং মার্কসের কম্বিনেশন অনুযায়ী ডISTINCT মান বের করে এবং প্রতিটি ইউনিক কম্বিনেশনের ফ্রিকোয়েন্সি কাউন্ট করতে অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করা হয়।
উদাহরণ: ডিটেইলস অ্যারে (নাম, মার্কস) - ডুপ্লিকেট ডেটা সহ
> db.demo586.insertOne({ "details": [ { "Name": "Chris", "Marks": 71 }, { "Name": "Chris", "Marks": 61 }, { "Name": "David", "Marks": 81 } ] });
> db.demo586.insertOne({ "details": [ { "Name": "Chris", "Marks": 71 }, { "Name": "Carol", "Marks": 61 }, { "Name": "David", "Marks": 81 } ] });
জটিল পাইপলাইন: নাম অনুযায়ী গ্রুপ, মার্কসের ইউনিক ভ্যালু এবং কাউন্ট
> var q = [
{ $unwind: "$details" },
{ $group: {
_id: { "Name": "$details.Name", "Marks": "$details.Marks" },
count: { $sum: 1 }
}},
{ $group: {
_id: "$_id.Name",
distinctV: { $addToSet: { "value": "$_id.Marks", "numberOfValues": "$count" } }
}},
{ $project: { _id: 0, Name: "$_id", distinctV: 1 } }
];
> db.demo586.aggregate(q);
আউটপুট:
{ "distinctV" : [ { "value" : 61, "numberOfValues" : 1 } ], "Name" : "Carol" }
{ "distinctV" : [ { "value" : 71, "numberOfValues" : 2 }, { "value" : 61, "numberOfValues" : 1 } ], "Name" : "Chris" }
{ "distinctV" : [ { "value" : 81, "numberOfValues" : 2 } ], "Name" : "David" }
প্রক্রিয়া:
$unwind- details অ্যারে ফ্ল্যাটেন- প্রথম
$group- (Name, Marks) জোড়া অনুযায়ী গ্রুপ, কাউন্ট - দ্বিতীয়
$group- Name অনুযায়ী গ্রুপ, মার্কসের ইউনিক সেট ($addToSet) তৈরি $project- আউটপুট ফরম্যাট