MongoDB এগ্রিগেশনে ডাবল $group ব্যবহার করে একটি ফিল্ড দিয়ে গ্রুপ করে অন্য ফিল্ডের ইউনিক কাউন্ট করা
MongoDB-এ একটি ফিল্ড (যেমন Name1) দিয়ে গ্রুপ করে, অন্য ফিল্ড (Name2) এর ইউনিক (Distinct) মান সংখ্যা বের করতে দুটি $group স্টেজ কম্বাইন করে ব্যবহার করা হয়। প্রথমে কম্বিনেশন গ্রুপ, তারপর আউটার গ্রুপ।
১. কালেকশন ও নমুনা ডেটা তৈরি (ডুপ্লিকেট কম্বিনেশন সহ)
> db.demo354.insertOne({"Name1":"Chris","Name2":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5685a6f8647eb59e5620c0") }
> db.demo354.insertOne({"Name1":"Chris","Name2":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5685a9f8647eb59e5620c1") }
> db.demo354.insertOne({"Name1":"Chris","Name2":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5685aff8647eb59e5620c2") }
> db.demo354.insertOne({"Name1":"Carol","Name2":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5685c4f8647eb59e5620c3") }
> db.demo354.insertOne({"Name1":"Carol","Name2":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5685c5f8647eb59e5620c4") }
২. সব ডকুমেন্ট দেখানো
> db.demo354.find();
আউটপুট:
৩. ডাবল গ্রুপ এগ্রিগেশন কোয়েরি
> db.demo354.aggregate([ { $group: { _id: { "Name1": "$Name1", "Name2": "$Name2" } } }, { $group: { _id: "$_id.Name1", "Name2": { $sum: 1 } } }, { $project: { _id: 0, Name1: "$_id", Name2: 1 } } ])স্টেজ ব্যাখ্যা:
- ১ম $group:
_id: {Name1, Name2}- Name1+Name2 কম্বিনেশন দিয়ে গ্রুপ। ডুপ্লিকেট কম্বিনেশন (Chris+David দুইবার, Carol+John দুইবার) একবার হয়ে যায়। ফলাফল: ৩টি ইউনিক কম্বিনেশন।- ২য় $group:
_id: "$_id.Name1"- এখন Name1 দিয়ে গ্রুপ।Name2: {$sum: 1}- প্রতিটি Name1-র জন্য ইউনিক Name2 কতটি আছে তা কাউন্ট।- $project: আউটপুট ফরম্যাটিং।
৪. ফলাফল
অর্থ:
- Chris-র সাথে যুক্ত ইউনিক Name2: ২টি (David, Bob)।
- Carol-র সাথে যুক্ত ইউনিক Name2: ১টি (John)।
এটি "প্রতি ক্যাটাগরি কতটি ইউনিক প্রোডাক্ট" টাইপ রিপোর্টের জন্য আদর্শ।