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

MongoDB में विशिष्ट नेस्टेड प्रॉपर्टीज पर प्रोजेक्शन कैसे करें?

MongoDB में गहरी नेस्टेड ऑब्जेक्ट से विशिष्ट फील्ड्स प्रोजेक्ट करने के लिए, एग्रीगेशन पाइपलाइन का उपयोग करें: $addFields के साथ $objectToArray, $filter, $arrayToObject।

उदाहरण: गहरी नेस्टेड ऑब्जेक्ट

> db.demo379.insertOne({
    "details1" : {
        "details2" : {
            "details3" : {
                "10" : "John", "50" : "Chris", "40" : "David", "30" : "Mike"
            }
        }
    }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a94f82ae06a1609a00b10") }

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

> db.demo379.find().pretty();

आउटपुट: संख्यात्मक कुंजियों वाला नेस्टेड ऑब्जेक्ट।

एग्रीगेशन: कुंजी 35-60 के बीच वाले फील्ड्स प्रोजेक्ट करें

> db.demo379.aggregate([
    { "$addFields": {
        "details1.details2.details3": {
            "$arrayToObject": {
                "$filter": {
                    "input": { "$objectToArray": "$details1.details2.details3" },
                    "as": "out",
                    "cond": {
                        "$and": [
                            { "$gte": [ "$$out.k", "35" ] },
                            { "$lte": [ "$$out.k", "60" ] }
                        ]
                    }
                }
            }
        }
    }}
]);

परिणाम

{ "_id" : ObjectId("5e5a94f82ae06a1609a00b10"), "details1" : { "details2" : { "details3" : { "40" : "David", "50" : "Chris" } } } }

चरण व्याख्या

  1. $objectToArray: नेस्टेड ऑब्जेक्ट को {k, v} ऑब्जेक्ट्स की सरणी में बदलता है।
  2. $filter: उन तत्वों को रखता है जहां कुंजी (स्ट्रिंग के रूप में) "35" और "60" के बीच है (शब्दकोश क्रम)।
  3. $arrayToObject: फ़िल्टर्ड सरणी को वापस ऑब्जेक्ट में बदलता है।
  4. $addFields: मूल पथ पर नेस्टेड ऑब्जेक्ट को ओवरराइट करता है।

नोट

  • कुंजी स्ट्रिंग हैं; संख्यात्मक तुलना के लिए, पहले $toInt के साथ कन्वर्ट करें: {$gte: [{$toInt:"$$out.k"}, 35]}।
  • यह पैटर्न डायनामिक/अज्ञात कुंजी नामों के लिए उपयोगी है।
  • <
  • ज्ञात निश्चित पथ के लिए, सरल प्रोजेक्शन { "details1.details2.details3.40": 1 } काम करता है।
  1. - MongoDB 4 में नेस्टेड क्वेरी बनाकर विशिष्ट दस्तावेज़ प्राप्त करना

    नेस्टेड क्वेरी के लिए, पहले दस्तावेज़ों के साथ एक कलेक्शन बनाते हैं: नमूना डेटा बनाना (नेस्टेड स्ट्रक्चर) db.demo492.insertOne({ ProductDetails : { StockDetails : [ { ProductName : Product-4 }, {ProductName : Product-5}, { ProductName : Product-6} ] } }); सभी दस्तावे

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

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

  1. - MongoDB एग्रीगेशन और प्रोजेक्शन

    इसके लिए aggregate() के साथ $project का उपयोग करें। एग्रीगेशन में $project पाइपलाइन में अगले चरण के लिए अनुरोधित फील्ड्स के साथ डॉक्यूमेंट्स को पास करता है। आइए एक कलेक्शन बनाते हैं: > db.demo762.insertOne({ _id : { userId:101, userName:Chris }, countryName : US, details : [ { Name : Robert, Due