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

एक ही मोंगोडब क्वेरी में गिनती और अलग गिनती के आधार पर समूह का चयन करें

जैसे ही आप सही दिशा में जा रहे थे, आप यहां सही लाइनों के साथ सोचने लगे हैं। अपनी SQL मानसिकता को बदलना, "विशिष्ट" वास्तव में $group लिखने का एक और तरीका है किसी भी भाषा में संचालन। इसका मतलब है कि आपके पास दो . है समूह संचालन यहां हो रहा है और, एकत्रीकरण पाइपलाइन शर्तों में, दो पाइपलाइन चरण।

कल्पना करने के लिए सरलीकृत दस्तावेज़ों के साथ:

{
    "campaign_id": "A",
    "campaign_name": "A",
    "subscriber_id": "123"
},
{
    "campaign_id": "A",
    "campaign_name": "A",
    "subscriber_id": "123"
},
{
    "campaign_id": "A",
    "campaign_name": "A",
    "subscriber_id": "456"
}

इसका कारण यह है कि दिए गए "अभियान" संयोजन के लिए कुल संख्या और "विशिष्ट" संख्या क्रमशः "3" और "2" है। तो तार्किक बात यह है कि उन सभी "सब्सक्राइबर_आईडी" मानों को पहले "समूह" करें और प्रत्येक के लिए घटनाओं की गिनती रखें, फिर "पाइपलाइन", "कुल" सोचते समय प्रति "अभियान" की गणना करें और फिर "गिनें" अलग" बारंबारता एक अलग संख्या के रूप में:

db.campaigns.aggregate([
    { "$match": { "subscriber_id": { "$ne": null }}},

    // Count all occurrences
    { "$group": {
        "_id": {
            "campaign_id": "$campaign_id",
            "campaign_name": "$campaign_name",
            "subscriber_id": "$subscriber_id"
        },
        "count": { "$sum": 1 }
    }},

    // Sum all occurrences and count distinct
    { "$group": {
        "_id": {
            "campaign_id": "$_id.campaign_id",
            "campaign_name": "$_id.campaign_name"
        },
        "totalCount": { "$sum": "$count" },
        "distinctCount": { "$sum": 1 }
    }}
])

पहले "समूह" के बाद आउटपुट दस्तावेज़ इस तरह देखे जा सकते हैं:

{ 
    "_id" : { 
        "campaign_id" : "A", 
        "campaign_name" : "A", 
        "subscriber_id" : "456"
    }, 
    "count" : 1 
}
{ 
    "_id" : { 
        "campaign_id" : "A", 
        "campaign_name" : "A", 
        "subscriber_id" : "123"
    }, 
    "count" : 2
}

तो नमूने में "तीन" दस्तावेजों से, "2" एक अलग मूल्य से संबंधित है और "1" दूसरे से संबंधित है। इसे अभी भी $sum . के साथ जोड़ा जा सकता है कुल मिलान दस्तावेज़ प्राप्त करने के लिए जो आप निम्न चरण में करते हैं, अंतिम परिणाम के साथ:

{ 
    "_id" : { 
        "campaign_id" : "A", 
        "campaign_name" : "A"
    },
    "totalCount" : 3,
    "distinctCount" : 2
}

एकत्रीकरण पाइपलाइन के लिए वास्तव में एक अच्छा सादृश्य यूनिक्स पाइप है "|" ऑपरेटर, जो संचालन की "चेनिंग" की अनुमति देता है ताकि आप एक कमांड के आउटपुट को अगले के इनपुट के माध्यम से पास कर सकें, और इसी तरह। इस तरह से अपनी प्रसंस्करण आवश्यकताओं के बारे में सोचना शुरू करने से आपको एकत्रीकरण पाइपलाइन के साथ संचालन को बेहतर ढंग से समझने में मदद मिलेगी।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SQL में किसी संख्या को प्रतिशत के रूप में प्रारूपित करें

  2. mongoexport में निर्यात किए गए MongoDB दस्तावेज़ों को कैसे सुंदर बनाएं?

  3. गोलंग एमजीओ का उपयोग करके मोंगोडीबी एटलस से कनेक्ट करना:प्रतिकृति सेट के लिए लगातार कोई पहुंच योग्य सर्वर नहीं है

  4. मोंगिमपोर्ट का उपयोग करके JSON फ़ाइल आयात करना, `अप्रत्याशित पहचानकर्ता` प्राप्त करना जारी रखें?

  5. pymongo.errors.CursorNotFound:कर्सर आईडी '...' सर्वर पर मान्य नहीं है