MongoDB में $lookup के साथ दो कॉलम्स के आधार पर ग्रुपिंग
दो कॉलम्स के आधार पर ग्रुप करने के लिए $lookup का उपयोग करें।
कलेक्शन बनाना
> db.demo132.insertOne({"CountryName1":"US","CountryName2":"UK",Value:50});
{ "acknowledged": true, "insertedId": ObjectId("5e31950468e7f832db1a7f75") }
> db.demo132.insertOne({"CountryName1":"UK","CountryName2":"AUS",Value:10});
{ "acknowledged": true, "insertedId": ObjectId("5e31951d68e7f832db1a7f76") }
> db.demo132.insertOne({"CountryName1":"AUS","CountryName2":"US",Value:40});
{ "acknowledged": true, "insertedId": ObjectId("5e31952c68e7f832db1a7f77") }
सभी डॉक्यूमेंट्स
> db.demo132.find();
{ "_id": ObjectId("5e31950468e7f832db1a7f75"), "CountryName1": "US", "CountryName2": "UK", "Value": 50 }
{ "_id": ObjectId("5e31951d68e7f832db1a7f76"), "CountryName1": "UK", "CountryName2": "AUS", "Value": 10 }
{ "_id": ObjectId("5e31952c68e7f832db1a7f77"), "CountryName1": "AUS", "CountryName2": "US", "Value": 40 }
$lookup के साथ ग्रुपिंग क्वेरी
> db.demo132.aggregate([
{
"$lookup": {
"from": "demo132",
"localField": "CountryName1",
"foreignField": "CountryName2",
"as": "out"
}
},
{ "$unwind": "$out" },
{
"$project": {
"_id": 0,
"CountryName1": 1,
"total": { "$sum": ["$Value", "$out.Value"] }
}
}
])
परिणाम
{ "CountryName1": "US", "total": 90 }
{ "CountryName1": "UK", "total": 60 }
{ "CountryName1": "AUS", "total": 50 }
व्याख्या
- $lookup: समान कलेक्शन से सेल्फ-जॉइन करता है (CountryName1 को CountryName2 से मिलान)
- localField: वर्तमान डॉक्यूमेंट का फील्ड (CountryName1)
- foreignField: जॉइन किए गए कलेक्शन का फील्ड (CountryName2)
- $unwind: जॉइन किए गए ऐरे को फ्लैट करता है
- $sum: दोनों डॉक्यूमेंट्स के Value जोड़ता है
गणना विवरण
- US: अपना 50 + UK का 40 (जहां CountryName2=US) = 90
- UK: अपना 10 + US का 50 (जहां CountryName2=UK) = 60
- AUS: अपना 40 + UK का 10 (जहां CountryName2=AUS) = 50