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

कुल प्रक्षेपण पर $elemMatch का उपयोग कैसे करें?

काफी पुराने प्रश्न पर लेकिन वस्तुतः प्रस्तावित उत्तरों में से कोई भी अच्छा नहीं है।

TLDR :

आप $elemMatch का उपयोग $प्रोजेक्ट चरण में नहीं कर सकते। लेकिन आप $filter जैसे अन्य एकत्रीकरण ऑपरेटरों का उपयोग करके समान परिणाम प्राप्त कर सकते हैं।

db.itens.aggregate([
    {
        $project: {
            compList: {
               $filter: {
                input: "$complist",
                as: "item",
                cond: {$eq: ["$$item.a", 1]}
               }
            }
        }
    }
])

और यदि आप सरणी से केवल पहला आइटम चाहते हैं जो उस स्थिति से मेल खाता है जो $elemMatch करता है तो आप $arrayElemAt

को शामिल कर सकते हैं

गहराई से स्पष्टीकरण में :

पहले $elemMatch को समझते हैं:

$elemMatch एक क्वेरी एक्सप्रेशन है, जबकि इसका यह प्रोजेक्शन वर्जन भी मौजूद है, यह एक क्वेरी प्रोजेक्शन को संदर्भित करता है न कि $प्रोजेक्ट एग्रीगेशन स्टेज को।

तो क्या? किसी भी चीज़ से इसका क्या लेना - देना है? अच्छी तरह से एक $ प्रोजेक्ट चरण में कुछ इनपुट संरचना हो सकती है, जबकि हम इसका उपयोग करना चाहते हैं:

<ब्लॉकक्वॉट>

<फ़ील्ड>:<अभिव्यक्ति>

मान्य व्यंजक क्या है?

<ब्लॉकक्वॉट>

अभिव्यक्तियों में फ़ील्ड पथ, अक्षर, सिस्टम चर, अभिव्यक्ति ऑब्जेक्ट और अभिव्यक्ति ऑपरेटर शामिल हो सकते हैं। भावों को नेस्ट किया जा सकता है।

इसलिए हम एक एक्सप्रेशन ऑपरेटर का उपयोग करना चाहते हैं, लेकिन जैसा कि आप डॉक्टर के $elemMatch से देख सकते हैं। उसका हिस्सा नहीं है। इसलिए यह एक एग्रीगेशन $project . में उपयोग करने के लिए एक मान्य एक्सप्रेशन नहीं है मंच।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के लिए नामकरण परंपराएं क्या हैं?

  2. मोंगो एकत्रीकरण ढांचे के साथ सरणी के विशिष्ट तत्व द्वारा समूह

  3. MongoDB के प्रशासन के लिए विचार

  4. कुल गिनती प्राप्त करने के लिए मोंगोडीबी में कुल योग कैसे प्राप्त करें?

  5. ग्रिडएफएस (जावा का उपयोग करके) में अद्यतन संचालन कैसे करें?