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

MongoDB एग्रीगेशन से ऐरे के अंदर मल्टीपल आइटम प्राप्त करें

MongoDB एग्रीगेशन: $unwind, $match, $group से ऐरे के मल्टीपल एलिमेंट फ़िल्टर करें

ऐरे के अंदर ऑब्जेक्ट को फ़िल्टर करके केवल मैचिंग एलिमेंट प्राप्त करने के लिए एग्रीगेशन पाइपलाइन का उपयोग करें।

कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें

> db.retrieveMultipleDemo.insertOne({
  "UserDetails": [
    {"_id": "101", "UserName": "John", "UserAge": 23},
    {"_id": "102", "UserName": "Carol", "UserAge": 21},
    {"_id": "103", "UserName": "David", "UserAge": 23},
    {"_id": "104", "UserName": "Sam", "UserAge": 25}
  ]
});
{ "acknowledged": true, "insertedId": ObjectId("5cd40c85edc6604c74817cf0") }

डॉक्यूमेंट देखें

> db.retrieveMultipleDemo.find().pretty();
{
  "_id": ObjectId("5cd40c85edc6604c74817cf0"),
  "UserDetails": [
    {"_id": "101", "UserName": "John", "UserAge": 23},
    {"_id": "102", "UserName": "Carol", "UserAge": 21},
    {"_id": "103", "UserName": "David", "UserAge": 23},
    {"_id": "104", "UserName": "Sam", "UserAge": 25}
  ]
}

एग्रीगेशन: id 101 या 103 AND उम्र 23 वाले एलिमेंट

> var myIds = ["101", "103"];
> db.retrieveMultipleDemo.aggregate([
  {$unwind: "$UserDetails"},
  {$match: {"UserDetails._id": {$in: myIds}, "UserDetails.UserAge": 23}},
  {$group: {"_id": "$_id", "UserDetails": {$push: "$UserDetails"}}},
  {$project: {"_id": 0, "UserDetails": 1}}
]);
{ "UserDetails": [{"_id": "101", "UserName": "John", "UserAge": 23}, {"_id": "103", "UserName": "David", "UserAge": 23}] }

पाइपलाइन चरण समझें

  1. $unwind: "$UserDetails" - ऐरे को फ्लैट करता है, प्रत्येक एलिमेंट अलग डॉक्यूमेंट बनाता है
  2. $match - फ़िल्टर: _id इन myIds में हो AND UserAge = 23
  3. $group - मूल _id द्वारा फिर से ग्रुप करके ऐरे पुनर्निर्माण ($push)
  4. $project - _id छुपाएं, केवल UserDetails दिखाएं

नोट: myIds वेरिएबल

शेल वेरिएबल myIds एग्रीगेशन में सीधे उपयोग हो जाता है। ड्राइवर कोड में सरणी लिटरल पास करें।

बेहतर विकल्प (MongoDB 3.6+): $filter

db.retrieveMultipleDemo.aggregate([
  {$project: {
    UserDetails: {
      $filter: {
        input: "$UserDetails",
        cond: {$and: [
          {$in: ["$$this._id", myIds]},
          {$eq: ["$$this.UserAge", 23]}
        ]}
      }
    }
  }}
])

$filter अधिक कुशल है क्योंकि $unwind की जरूरत नहीं।

  1. - MongoDB में सबडॉक्यूमेंट्स के ऐरे को कैसे क्वेरी करें?

    सबडॉक्यूमेंट्स के ऐरे को क्वेरी करने के लिए MongoDB में $unwind का उपयोग करें। नमूना डेटा बनाना (सबडॉक्यूमेंट्स ऐरे) db.demo499.insertOne({ details: [ { Name:MIT, Rank: 1, CountryName:US }, { Name:Stanford University, Rank: 2 }, { Name:University of California, Berkeley, Rank: 3 }

  1. - MongoDB में _id द्वारा समूह कैसे बनाएं

    MongoDB में _id द्वारा समूह बनाने के लिए, $group का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo529.insertOne({Score:10}); { acknowledged : true, insertedId : ObjectId(5e8b1d5bef4dcbee04fbbbe4) } > db.demo529.insertOne({Score:20}); { acknowledged : true, insertedId : ObjectId(

  1. - MongoDB में ऑब्जेक्ट्स की सरणी के अंदर कई मिलान कैसे खोजें?

    इसके लिए, $and के साथ $regex का उपयोग करें। $and एक या अधिक एक्सप्रेशन की सरणी पर लॉजिकल AND ऑपरेशन करता है और उन दस्तावेज़ों को चुनता है जो सरणी में सभी एक्सप्रेशन को संतुष्ट करते हैं। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo525.insertOne({details:[{Name:Chris,CountryName:US}]}); { ackn