MongoDB एग्रीगेशन के साथ नेस्टेड फील्ड्स निकालना
इसके लिए aggregate() का उपयोग करें।
कलेक्शन बनाना
>db.demo138.insertOne({"Id":101,"PlayerDetails":[{"PlayerName":"Chris","PlayerScore":400},{"PlayerName":"David","PlayerScore":1000}]});
{ "acknowledged": true, "insertedId": ObjectId("5e31bb9ffdf09dd6d08539a1") }
>db.demo138.insertOne({"Id":102,"PlayerDetails":[{"PlayerName":"Bob","PlayerScore":500},{"PlayerName":"Carol","PlayerScore":600}]});
{ "acknowledged": true, "insertedId": ObjectId("5e31bbcefdf09dd6d08539a2") }
सभी डॉक्यूमेंट्स
> db.demo138.find();
{ "_id": ObjectId("5e31bb9ffdf09dd6d08539a1"), "Id": 101, "PlayerDetails": [ { "PlayerName": "Chris", "PlayerScore": 400 }, { "PlayerName": "David", "PlayerScore": 1000 } ] }
{ "_id": ObjectId("5e31bbcefdf09dd6d08539a2"), "Id": 102, "PlayerDetails": [ { "PlayerName": "Bob", "PlayerScore": 500 }, { "PlayerName": "Carol", "PlayerScore": 600 } ] }
नेस्टेड फील्ड्स निकालने की क्वेरी
> db.demo138.aggregate([{ $unwind: "$PlayerDetails" }, { $project: { "PlayerName": "$PlayerDetails.PlayerName", "PlayerScore": "$PlayerDetails.PlayerScore" } } ]);
परिणाम
{ "_id": ObjectId("5e31bb9ffdf09dd6d08539a1"), "PlayerName": "Chris", "PlayerScore": 400 }
{ "_id": ObjectId("5e31bb9ffdf09dd6d08539a1"), "PlayerName": "David", "PlayerScore": 1000 }
{ "_id": ObjectId("5e31bbcefdf09dd6d08539a2"), "PlayerName": "Bob", "PlayerScore": 500 }
{ "_id": ObjectId("5e31bbcefdf09dd6d08539a2"), "PlayerName": "Carol", "PlayerScore": 600 }
व्याख्या
- $unwind: "$PlayerDetails": PlayerDetails ऐरे को अलग-अलग डॉक्यूमेंट्स में फैलाता है (प्रत्येक खिलाड़ी के लिए एक)
- $project: आउटपुट आकार निर्दिष्ट करता है
- PlayerName: "$PlayerDetails.PlayerName" - अनविंडेड ऑब्जेक्ट से निकालता है
- PlayerScore: "$PlayerDetails.PlayerScore" - अनविंडेड ऑब्जेक्ट से निकालता है
- _id स्वचालित रूप से शामिल होता है (मूल डॉक्यूमेंट का)
परिणाम संरचना
प्रत्येक मूल डॉक्यूमेंट के लिए, PlayerDetails ऐरे में प्रत्येक ऑब्जेक्ट एक अलग डॉक्यूमेंट बन जाता है जिसमें फ्लैट PlayerName और PlayerScore फील्ड्स होते हैं।
उपयोग के मामले
- नेस्टेड ऐरे डेटा को फ्लैट करना
- रिपोर्टिंग के लिए टेबुलर फॉर्मेट में निर्यात
- व्यक्तिगत ऐरे तत्वों पर आगे एग्रीगेशन