Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB कलेक्शन से सभी नेस्टेड फील्ड्स कैसे प्राप्त करें?

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 }

व्याख्या

  1. $unwind: "$PlayerDetails": PlayerDetails ऐरे को अलग-अलग डॉक्यूमेंट्स में फैलाता है (प्रत्येक खिलाड़ी के लिए एक)
  2. $project: आउटपुट आकार निर्दिष्ट करता है
    • PlayerName: "$PlayerDetails.PlayerName" - अनविंडेड ऑब्जेक्ट से निकालता है
    • PlayerScore: "$PlayerDetails.PlayerScore" - अनविंडेड ऑब्जेक्ट से निकालता है
    • _id स्वचालित रूप से शामिल होता है (मूल डॉक्यूमेंट का)

परिणाम संरचना

प्रत्येक मूल डॉक्यूमेंट के लिए, PlayerDetails ऐरे में प्रत्येक ऑब्जेक्ट एक अलग डॉक्यूमेंट बन जाता है जिसमें फ्लैट PlayerName और PlayerScore फील्ड्स होते हैं।

उपयोग के मामले

  • नेस्टेड ऐरे डेटा को फ्लैट करना
  • रिपोर्टिंग के लिए टेबुलर फॉर्मेट में निर्यात
  • व्यक्तिगत ऐरे तत्वों पर आगे एग्रीगेशन
  1. - MongoDB कलेक्शन से यूनिक मान प्राप्त करें

    यूनिक मान प्राप्त करने और डुप्लिकेट को अनदेखा करने के लिए, MongoDB में distinct() का उपयोग करें। distinct() एक सिंगल कलेक्शन में निर्दिष्ट फील्ड के लिए विशिष्ट मान ढूंढता है और परिणाम को एक ऐरे में लौटाता है। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo704.insertOne({LanguageCode:hi});

  1. - MongoDB कलेक्शन से डुप्लिकेट कैसे हटाएं?

    MongoDB कलेक्शन में डुप्लिकेट दस्तावेज़ों को रोकने के लिए, आप उस फ़ील्ड पर एक यूनिक इंडेक्स बना सकते हैं जो यूनिक होना चाहिए। unique: true विकल्प का उपयोग करें और साथ में dropDups: true (नोट: MongoDB 3.0+ में dropDups हटा दिया गया है; इसके बजाय डुप्लिकेट्स को मैन्युअली हटाएं)। सिंटैक्स db.yourColle

  1. - Java का उपयोग करके MongoDB कलेक्शन से सभी डॉक्यूमेंट्स कैसे प्राप्त करें?

    आप MongoDB में मौजूदा कलेक्शन से find() मेथड का उपयोग करके डॉक्यूमेंट्स प्राप्त कर सकते हैं। सिंटैक्स db.coll.find() जहां, db डेटाबेस है। coll वह कलेक्शन (नाम) है जिससे आप डॉक्यूमेंट्स प्राप्त करना चाहते हैं। उदाहरण मान लें कि MongoDB डेटाबेस में students नामक एक कलेक्शन है जिसमें निम्नलिखित डॉक्