MongoDB में दो-स्तरीय ग्रुपिंग: अद्वितीय मानों की गिनती
एक फ़ील्ड (Name1) द्वारा समूहित करके दूसरे फ़ील्ड (Name2) के अद्वितीय संयोजनों की गिनती करने के लिए, दो $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") }
एग्रीगेशन: Name1 प्रति अद्वितीय Name2 गिनती
> db.demo354.aggregate([
{$group: {_id: {"Name1": "$Name1", "Name2": "$Name2"}}}, // अद्वितीय जोड़े
{$group: {_id: "$_id.Name1", "Name2": {$sum: 1}}}, // Name1 द्वारा गिनती
{$project: {_id: 0, Name1: "$_id", Name2: 1}} // आकार बदलना
]);
परिणाम
{ "Name2": 2, "Name1": "Chris" } // Chris के साथ David, Bob (2 अद्वितीय)
{ "Name2": 1, "Name1": "Carol" } // Carol के साथ केवल John (1 अद्वितीय)
पहला $group संयुक्त (Name1, Name2) द्वारा डुप्लिकेट हटाता है। दूसरा $group Name1 द्वारा गिनता है। $project आउटपुट साफ़ करता है।