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

MongoDB में वाइल्डकार्ड का उपयोग करके नेस्टेड फील्ड्स बहिष्कृत करना

MongoDB एग्रीगेशन में $objectToArray और $arrayToObject का उपयोग करके नेस्टेड फील्ड्स बहिष्कृत करना

MongoDB में डायनामिक/अज्ञात नाम वाले नेस्टेड फील्ड्स को बहिष्कृत करने के लिए एग्रीगेशन पाइपलाइन में ऑब्जेक्ट को ऐरे में बदलें, फ़िल्टर करें, फिर वापस ऑब्जेक्ट में बदलें।

उदाहरण: संग्रह और दस्तावेज़ बनाना

> db.demo413.insertOne(
  {
    "_id": "101",
    "details": {
      "Info1": { "Name":"Chris", "Age":21 },
      "Info2": { "Name":"David", "Age":23 }
    }
  }
);
{ "acknowledged" : true, "insertedId" : "101" }

दस्तावेज़ देखना

> db.demo413.find();

आउटपुट:

{ "_id" : "101", "details" : { "Info1" : { "Name" : "Chris", "Age" : 21 }, "Info2" : { "Name" : "David", "Age" : 23 } } }

सभी नेस्टेड ऑब्जेक्ट्स से Age फील्ड बहिष्कृत करना

> db.demo413.aggregate([
  { $project: { "details" : { $objectToArray: "$details" } } },
  { $project: { "details.v.Age" : 0 } },
  { $project: { "details" : { $arrayToObject: "$details" } } }
]);

आउटपुट:

{ "_id" : "101", "details" : { "Info1" : { "Name" : "Chris" }, "Info2" : { "Name" : "David" } } }

चरण-दर-चरण व्याख्या:

  1. $objectToArray: "$details" - ऑब्जेक्ट को की-वैल्यू जोड़े के ऐरे में बदलता है: [{k: "Info1", v: {Name: "Chris", Age: 21}}, ...]
  2. "details.v.Age": 0 - ऐरे के प्रत्येक एलिमेंट के v (वैल्यू) ऑब्जेक्ट से Age फील्ड बहिष्कृत करता है
  3. $arrayToObject: "$details" - ऐरे को वापस ऑब्जेक्ट में बदलता है

यह पैटर्न उपयोगी है जब:

  • नेस्टेड फील्ड नाम डायनामिक/अज्ञात हों
  • सभी सब-ऑब्जेक्ट्स से एक ही फील्ड हटाना हो
  • स्कीमा-लेस संग्रह में काम कर रहे हों

MongoDB 4.4+ में सरल विकल्प:

db.demo413.aggregate([
  {$project: {"details.Age": 0}} // सीधे नेस्टेड फील्ड बहिष्कृत
])

लेकिन यह केवल तभी काम करता है जब फील्ड पथ ज्ञात और स्थिर हो।

  1. - MongoDB में सरणी फील्ड के साथ काम करके सभी से मिलान कैसे करें?

    MongoDB में सभी से मिलान करने के लिए $all का उपयोग करें। $all ऑपरेटर उन डॉक्यूमेंट्स को चुनता है जहां फील्ड का मान एक सरणी है जिसमें सभी निर्दिष्ट तत्व होते हैं। आइए एक कलेक्शन बनाते हैं: > db.demo695.insertOne({ListOfValues:[100,200,500,800]}); { acknowledged : true, insertedId : ObjectId(5ea6d

  1. - MongoDB एग्रीगेशन में मल्टीपल फ़ील्ड्स द्वारा काउंट करना

    एक ही पाइपलाइन में कई फ़ील्ड्स पर काउंट करने के लिए $facet का उपयोग करें। डेमो डेटा db.demo721.insertOne({ details1: { id:101 }, details2: { id:101 }, details3: { id:101 } }); db.demo721.insertOne({ details1: { id:101 }, details2: { id:102 }, details3: { id:102 } }); क्वेरी

  1. - MongoDB में विशिष्ट नेस्टेड डॉक्यूमेंट्स के लिए ऑब्जेक्ट्स की सरणी पर क्वेरी कैसे करें?

    ऑब्जेक्ट्स की सरणी के लिए नेस्टेड डॉक्यूमेंट्स पर क्वेरी करने के लिए find() का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo763.insertOne( { _id:1, CountryName:US, studentInformation: [ { StudentName:Chris }, { StudentName:David, StudentAge:22 } ] } ); { acknowledged : true, insertedId : 1 } f