MongoDB में सामान्य फील्ड मान वाले दस्तावेज़ों को ग्रुप करके अन्य फील्ड की सरणी बनाने के लिए एग्रीगेशन में $group और $addToSet का उपयोग करें।
उदाहरण
सामान्य UserId वाले दस्तावेज़ बनाएं:
> db.findDocumentWithCommonFieldsDemo.insertOne({"UserId": 1, "UserName": "Carol"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51200") }
> db.findDocumentWithCommonFieldsDemo.insertOne({"UserId": 2, "UserName": "David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51201") }
> db.findDocumentWithCommonFieldsDemo.insertOne({"UserId": 1, "UserName": "Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51202") }
दस्तावेज़ देखें:
> db.findDocumentWithCommonFieldsDemo.find();
{ "_id" : ObjectId("5cdf8ebebf3115999ed51200"), "UserId" : 1, "UserName" : "Carol" }
{ "_id" : ObjectId("5cdf8ebebf3115999ed51201"), "UserId" : 2, "UserName" : "David" }
{ "_id" : ObjectId("5cdf8ebebf3115999ed51202"), "UserId" : 1, "UserName" : "Sam" }
UserId द्वारा ग्रुप करके UserName सरणी बनाएं
> db.findDocumentWithCommonFieldsDemo.aggregate({
$group: {
_id: "$UserId",
"UserDetails": {$addToSet: "$UserName"}
}
});
आउटपुट:
{ "_id" : 2, "UserDetails" : [ "David" ] }
{ "_id" : 1, "UserDetails" : [ "Sam", "Carol" ] }
व्याख्या:
_id: "$UserId"- UserId फील्ड द्वारा ग्रुपिंग$addToSet: "$UserName"- अद्वितीय UserName मान सरणी में संग्रहीत- UserId=1 के दो दस्तावेज़ हैं (Carol, Sam) → एक ग्रुप में
- UserId=2 का एक दस्तावेज़ है (David) → अलग ग्रुप
$addToSet vs $push
| ऑपरेटर | व्यवहार |
|---|---|
$addToSet | केवल अद्वितीय मान, डुप्लिकेट हटाता है |
$push | सभी मान (डुप्लिकेट सहित) |
अधिक जटिल ग्रुपिंग
db.collection.aggregate([
{$group: {
_id: "$UserId",
names: {$addToSet: "$UserName"},
count: {$sum: 1},
avgAge: {$avg: "$Age"}
}}
])
उपयोग: रिपोर्टिंग, विश्लेषण, डेटा समेकन, डुप्लिकेट पहचान के लिए उपयोगी।