MongoDB एग्रीगेशन में $group और $push का उपयोग करके मानों को समूहित करना
$group स्टेज के साथ $push एक्यूमुलेटर का उपयोग करके एक फील्ड द्वारा डॉक्यूमेंट्स को समूहित करता है और दूसरे फील्ड के मानों को एक ऐरे में एकत्रित करता है।
नमूना डेटा बनाना
> db.groupByDemo.insertOne({"UserName":"John","Subject":"MongoDB"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0457806ebf1256f136") }
> db.groupByDemo.insertOne({"UserName":"Larry","Subject":"MySQL"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0657806ebf1256f137") }
> db.groupByDemo.insertOne({"UserName":"John","Subject":"Java"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0d57806ebf1256f138") }
> db.groupByDemo.insertOne({"UserName":"John","Subject":"C"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f1357806ebf1256f139") }
> db.groupByDemo.insertOne({"UserName":"Larry","Subject":"SQL Server"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f1c57806ebf1256f13a") }
सभी डॉक्यूमेंट्स देखना
> db.groupByDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd69f0457806ebf1256f136"), "UserName" : "John", "Subject" : "MongoDB" }
{ "_id" : ObjectId("5cd69f0657806ebf1256f137"), "UserName" : "Larry", "Subject" : "MySQL" }
{ "_id" : ObjectId("5cd69f0d57806ebf1256f138"), "UserName" : "John", "Subject" : "Java" }
{ "_id" : ObjectId("5cd69f1357806ebf1256f139"), "UserName" : "John", "Subject" : "C" }
{ "_id" : ObjectId("5cd69f1c57806ebf1256f13a"), "UserName" : "Larry", "Subject" : "SQL Server" }
UserName द्वारा समूहित करना और Subjects एकत्रित करना
> db.groupByDemo.aggregate({
$group: {
'_id': '$UserName',
'Subject': { $push: '$Subject' }
}
});
आउटपुट:
{ "_id" : "Larry", "Subject" : [ "MySQL", "SQL Server" ] }
{ "_id" : "John", "Subject" : [ "MongoDB", "Java", "C" ] }
व्याख्या
_id: '$UserName'-UserNameफील्ड द्वारा समूहित करता है।$push: '$Subject'- प्रत्येक समूह के लिएSubjectमानों को एक ऐरे में एकत्रित करता है।- परिणाम _id में समूहित फील्ड मान और ऐरे में एकत्रित मान दिखाता है।
संबंधित एक्यूमुलेटर्स
| ऑपरेटर | उद्देश्य |
|---|---|
$push | सभी मानों को ऐरे में जोड़ता है (डुप्लिकेट शामिल) |
$addToSet | केवल यूनिक मानों को ऐरे में जोड़ता है |
$first/$last | समूह में पहला/अंतिम मान (सॉर्ट ऑर्डर पर निर्भर) |
$avg, $sum, $min, $max | न्यूमेरिक फील्ड्स के लिए गणितीय एक्यूमुलेशन |
उपयोग के मामले
- उपयोगकर्ता द्वारा टैग्स/श्रेणियों को समूहित करना।
- ग्राहक द्वारा ऑर्डर आईडी एकत्रित करना।
- परीक्षण परिणामों, लॉग एंट्रीज़ आदि को संकलित करना।