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

मोंगो मैप-रिड्यूस टू मिमिक काउंट (डिस्टिंक्ट (...)) ग्रुप बाय एसक्यूएल

मानचित्र-कम करने वाले समाधान को चुनने के बजाय, आप परिणाम को आसानी से एकत्रित कर सकते हैं:

  • Match रिकॉर्ड जहां दिनांक निर्दिष्ट तिथि के बराबर से अधिक है।

  • Group brand_id . के आधार पर फ़ील्ड.

  • $addToSet का उपयोग करें एक products . को बनाए रखने के लिए ऑपरेटर अद्वितीय की सूचीproduct_id प्रत्येक समूह के लिए।

  • Project count products . के प्रत्येक कुंजी में सरणी।

कोड:

db.collection.aggregate([
{$match:{"date":{$gte:new Date('2014-11-20')}}},
{$group:{"_id":"$brand_id","products":{$addToSet:"$product_id"}}},
{$project:{"_id":0,"brand_id":"$_id","distinct_prod":{$size:"$products"}}}
])

आपके मानचित्र-घटा समाधान पर आ रहा है,

यह एक तरीका है कि मोंगोडब प्रत्येक समूह के लिए कम कार्य को लागू कर सकता है। दस्तावेज़ों से :

आपको अपने map में कुछ संशोधन करने की आवश्यकता है ,reduce कार्य करता है और एक नया finalize add जोड़ें समारोह:

  • आपको यह याद रखना होगा कि जब mongodb reduce . का आह्वान करता है एक ही कुंजी के लिए एक से अधिक बार फ़ंक्शन, पिछले आमंत्रण के परिणाम को कम फ़ंक्शन के इनपुट के रूप में पास किया जाता है, साथ ही अन्य मानों के साथ अगली बार कम फ़ंक्शन लागू किया जाता है।
  • पहला बिंदु, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि कम करने के लिए इनपुट और कम फ़ंक्शन से वापसी मूल्य समान रूप से बनाया गया है, ताकि कम फ़ंक्शन के अंदर लिखा तर्क अपनी पिछली कॉल में अपने स्वयं के लौटाए गए मूल्य को संसाधित कर सके।
  • ली>
  • चूंकि हम बैचों में बुलाए जाने पर अलग-अलग मानों की गिनती प्राप्त करने में सक्षम नहीं होंगे, हम क्या कर सकते हैं, एक reduce लिखें फ़ंक्शन जो विशिष्ट product_ids को जमा करता है प्रत्येक कुंजी के लिए और एक लिखेंfinalize फ़ंक्शन जो उन अद्वितीय मानों की गणना करता है।

कोड:

db.collection.mapReduce(
    function() {
        // emitting the same structure returned by the reduce function.
        emit(this.brand_id, {"prod_id":[this.product_id]});
    },
    function(key, values) {
       // the return value would be a list of unique product_ids.
        var res = {"prod_id":[]};
        for(var i=0;i<values.length;i++)
        {
         for(var j=0;j<values[i].prod_id.length;j++){
            if(res.prod_id.indexOf(values[i].prod_id[j]) == -1){
                res.prod_id.push(values[i].prod_id[j]);
            }
        }}
        return res;
    },
    {
        query: {date: {$gte: new Date('2014-11-20')}},
        out: "example",
        finalize: function(key, reducedValue){
            // it returns just the count
            return reducedValue.prod_id.length;
        }
    }
)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. डॉकर कंपोज़ का उपयोग करके मोंगोडीबी और रेडपांडा के लिए एप्लिकेशन कैसे विकसित करें

  2. Mongoid और Rails . के साथ फ़ील्ड उपनाम

  3. PHP स्ट्रिंग को 24 वर्णों से 20 . तक संपीड़ित (छोटा) करें

  4. Mongodb संग्रह के बजाय विशिष्ट अभिलेखों पर कुल क्वेरी

  5. बीएसओएन क्या है और यह जेएसओएन से कैसे अलग है?