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

MongoDB विभिन्न दस्तावेजों में दो सरणियों में वस्तुओं की कुल संख्या?

हां, यह देखते हुए थोड़ा कठिन है कि कई सरणियाँ हैं, और यदि आप एक ही समय में दोनों को आज़माते हैं तो आप एक "कार्टेशियन स्थिति" के साथ समाप्त होते हैं जहाँ एक सरणी दूसरे की सामग्री को गुणा करती है।

इसलिए, शुरुआत में केवल सरणी सामग्री को संयोजित करें, जो संभवतः इंगित करता है कि आपको डेटा को पहली जगह में कैसे संग्रहीत करना चाहिए:

Model.aggregate(
    [
        { "$project": {
            "company": 1,
            "model": 1,
            "data": {
                "$setUnion": [
                    { "$map": {
                        "input": "$pros",
                        "as": "pro",
                        "in": {
                            "type": { "$literal": "pro" },
                            "value": "$$pro"
                        }
                    }},
                    { "$map": {
                        "input": "$cons",
                        "as": "con",
                        "in": {
                            "type": { "$literal": "con" },
                            "value": "$$con"
                        }
                    }}
                ]
            }
        }},
        { "$unwind": "$data" }
        { "$group": {
            "_id": { 
                "company": "$company",
                "model": "$model",
                "tag": "$data.value"
            },
            "pros": { 
                "$sum": { 
                    "$cond": [
                        { "$eq": [ "$data.type", "pro" ] },
                        1,
                        0
                    ]
                }
            },
            "cons": { 
                "$sum": { 
                    "$cond": [
                        { "$eq": [ "$data.type", "con" ] },
                        1,
                        0
                    ]
                }
            }
        }
    ], 
    function(err,result) {

    }
)

तो पहले $project के जरिए चरण $map ऑपरेटर प्रत्येक सरणी के प्रत्येक आइटम में "प्रकार" मान जोड़ रहे हैं। ऐसा नहीं है कि यह वास्तव में यहां मायने रखता है क्योंकि सभी वस्तुओं को वैसे भी "अद्वितीय" संसाधित करना चाहिए, $setUnion ऑपरेटर प्रत्येक सरणी को एकवचन सरणी में "contatenates" करता है।

जैसा कि पहले उल्लेख किया गया है, आपको शायद पहले स्थान पर इस तरह से भंडारण करना चाहिए।

फिर $unwind प्रोसेस करें उसके बाद $group , जिसमें प्रत्येक "पेशेवर" और "विपक्ष" का मूल्यांकन तब $cond के लिए यह "प्रकार" से मेल खा रहा है, या तो 1 returning लौटा रहा है या 0 जहां मैच क्रमशः true/false . है $sum पर एकत्रीकरण संचायक।

यह आपको एक "तार्किक मिलान" देता है ताकि निर्दिष्ट समूहीकरण कुंजियों के अनुसार एकत्रीकरण कार्रवाई के भीतर प्रत्येक संबंधित "प्रकार" की गणना की जा सके।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नोड.जेएस वातावरण में इलास्टिक्स खोज के साथ मोंगोडब का एकीकरण

  2. मेरे सभी दस्तावेज़ों नेस्टेड दस्तावेज़ मान बदलें

  3. MongoDB डॉकटर कंटेनर सॉकेट फ़ाइल को अनलिंक करने में विफल

  4. Mongo's Cursor.nextObject कभी-कभी ग़लती से अशक्त हो जाता है?

  5. mongodb प्रमाणीकरण सक्षम होने पर भी अतिथि कनेक्शन की अनुमति देता है