MongoDB एग्रीगेशन में $group से मल्टीपल फ़ील्ड पर डिस्टिंक्ट
एक से अधिक फ़ील्ड के यूनिक वैल्यू सेट प्राप्त करने के लिए $group स्टेज में $addToSet एक्यूमुलेटर का उपयोग करें।
कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName":"Chris","StudentAge":21,"StudentCountryName":"US"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d7") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName":"Robert","StudentAge":21,"StudentCountryName":"AUS"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d8") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName":"Chris","StudentAge":22,"StudentCountryName":"UK"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d9") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName":"David","StudentAge":24,"StudentCountryName":"AUS"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13da") }
सभी डॉक्यूमेंट देखें
> db.distinctOnMultipleFieldsDemo.find().pretty();
{ "_id": ObjectId("5cd2e518b64f4b851c3a13d7"), "StudentFirstName": "Chris", "StudentAge": 21, "StudentCountryName": "US" }
{ "_id": ObjectId("5cd2e518b64f4b851c3a13d8"), "StudentFirstName": "Robert", "StudentAge": 21, "StudentCountryName": "AUS" }
{ "_id": ObjectId("5cd2e518b64f4b851c3a13d9"), "StudentFirstName": "Chris", "StudentAge": 22, "StudentCountryName": "UK" }
{ "_id": ObjectId("5cd2e518b64f4b851c3a13da"), "StudentFirstName": "David", "StudentAge": 24, "StudentCountryName": "AUS" }
मल्टीपल फ़ील्ड पर डिस्टिंक्ट एग्रीगेशन
> db.distinctOnMultipleFieldsDemo.aggregate([
{
$group: {
_id: 0,
StudentFirstName: {$addToSet: "$StudentFirstName"},
StudentAge: {$addToSet: "$StudentAge"},
StudentCountryName: {$addToSet: "$StudentCountryName"}
}
}
]);
{ "_id": 0, "StudentFirstName": ["David", "Robert", "Chris"], "StudentAge": [24, 22, 21], "StudentCountryName": ["UK", "AUS", "US"] }
व्याख्या
_id: 0- सभी डॉक्यूमेंट को एक ग्रुप में रखता है$addToSet- केवल यूनिक वैल्यू सरणी में जोड़ता है (डुप्लिकेट इग्नोर)- Chris दो बार आया लेकिन सरणी में एक बार
- उम्र 21 दो बार आई लेकिन सरणी में एक बार
अन्य उपयोगी पैटर्न
// कंबाइंड यूनिक कॉम्बिनेशन (कंपाउंड डिस्टिंक्ट)
db.collection.aggregate([
{$group: {_id: {name: "$StudentFirstName", age: "$StudentAge"}}},
{$project: {_id: 0, name: "$_id.name", age: "$_id.age"}}
])