MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नेवला उप-डॉक फ़ील्ड का चयन करें

इस प्रकार MongoDB सरणी तत्वों के साथ मूल प्रक्षेपण को संभालता है। जबकि आप कुछ ऐसा कर सकते हैं:

Model.findOne({}, { "comments.upvotes": 1 },function(err,doc) {

})

और यह स्थिति से मेल खाने वाले सभी दस्तावेज़ों और निश्चित रूप से सभी सरणी तत्वों के लिए टिप्पणी सरणी के उप-दस्तावेज़ों के भीतर से "अपवोट्स" फ़ील्ड को वापस कर देगा, आप इसे स्थितिगत $ ऑपरेटर। यह मूल रूप से "सिद्धांत" . से उपजा है कि आम तौर पर आप वास्तव में पूरी सरणी वापस करना चाहते हैं। इसलिए इसने हमेशा काम किया है और इसके जल्द बदलने की संभावना नहीं है।

आप जो चाहते हैं उसे प्राप्त करने के लिए, आपको एकत्रीकरण ढांचा . यह आपको इस पर अधिक नियंत्रण देता है कि दस्तावेज़ कैसे लौटाए जाते हैं:

Model.aggregate(
    [
        // Match the document containing the array element
        { "$match": { "comments._id" : oid } },

        // Unwind to "de-normalize" the array content
        { "$unwind": "$comments" },

        // Match the specific array element
        { "$match": { "comments._id" : oid } },

        // Group back and just return the "upvotes" field
        { "$group": {
            "_id": "$_id",
            "comments": { "$push": { "upvotes": "$comments.upvotes" } }
        }}
    ],
    function(err,docs) {


    }
);

या 2.6 के बाद से MongoDB के आधुनिक संस्करणों में आप यह भी कर सकते हैं:

Model.aggregate(
    [
        { "$match": { "comments._id" : oid } },
        { "$project": {
            "comments": {
                "$setDifference": [
                    { "$map": {
                        "input": "$comments",
                        "as": "el",
                        "in": {
                            "$cond": [
                                { "$eq": [ "$$el._id", oid ] },
                                { "upvotes": "$$el.upvotes" },
                                false
                            ]
                        }
                    }},
                    [false]
                ]
            }}
        }}
    ],
    function(err,docs) {

    }
)

और वह $map का उपयोग करता है और $setDifference ऑपरेटरों को पहले $unwind मंच।

इसलिए यदि आप चाहते हैं कि दस्तावेज़ कैसे लौटाया जाए, इस पर अधिक नियंत्रण हो, तो एम्बेडेड दस्तावेज़ों के साथ काम करते समय एकत्रीकरण ढांचा इसे करने का तरीका है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb:$lookup . के साथ गहराई से नेस्टेड ऑब्जेक्ट ढूंढें

  2. मोंगोडब में गतिशील, गैर-अद्वितीय क्षेत्रों पर पूछताछ और छँटाई करते समय रंगे हुए पृष्ठांकन

  3. फ़ील्ड मान को विभाजित करके दस्तावेज़ों को फिर से आकार दें

  4. NoSql डेटाबेस (MongoDB) में विदेशी कुंजियों को कैसे लागू करें?

  5. PyMongo के साथ एक सरणी के अंदर एक वस्तु को अद्यतन कर रहा है