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

मोंगो मानचित्र पहली बार कम करें

ठीक है, मैं कुछ ऐसा लेकर आया हूँ जो मुझे सोचता है आप जो चाहते हैं वह कर सकते हैं। ध्यान दें, कि यह ठीक से काम नहीं कर सकता है क्योंकि मैं आपकी स्कीमा के बारे में 100% सुनिश्चित नहीं हूं (आपके उदाहरणों पर विचार करते हुए refer दिखाएं टाइप ए में उपलब्ध है, लेकिन बी नहीं (मुझे यकीन नहीं है कि यह एक चूक है, या आप रेफरर द्वारा क्या देखना चाहते हैं) ... वैसे भी, यहां मैं इसके साथ आया हूं:

नक्शा कार्य:

function() {
    var obj = {
        "types": {},
        "tags": {},
    }
    obj.types[this.type] = 1;
    if (this.tags) {
        for (var tag in this.tags) {
            obj.tags[this.tags[tag]] = 1;
        }
    }
    emit(this.refer.url, obj);
}

कम करें फ़ंक्शन:

function(key, values) {
    var obj = {
        "types": {},
        "tags": {},
    }
    for (var i = 0; i < values.length; i++) {
        for (var type in values[i].types) {
            if (!type in obj.types) {
                obj.types[type] = 0;
            }
            obj.types[type] += values[i].types[type];
        }
        for (var tag in values[i].tags) {
            if (!tag in obj.tags) {
                obj.tags[tag] = 0;
            }
            obj.tags[tag] += values[i].tags[tag];
        }
    }
    return obj;
}

तो मूल रूप से, यह कैसे काम करता है यह है। मैप फ़ंक्शन रेफ़र.यूआरएल की एक कुंजी का उपयोग करता है (जो मैंने आपके विवरण के आधार पर अनुमान लगाया था)। तो अंतिम परिणाम _id . के साथ एक सरणी जैसा दिखेगा Refer.url के बराबर (यह url पर आधारित समूह है)। यह तब एक वस्तु बनाता है जिसके नीचे दो वस्तुएं होती हैं (प्रकार और टैग)। वस्तु का कारण यह है कि नक्शा और कम एक ही प्रारूप वस्तु का उत्सर्जन कर सकते हैं। इसके अलावा, मुझे लगता है कि यह अपेक्षाकृत आत्म व्याख्यात्मक होना चाहिए (यदि आप नहीं समझते हैं, तो मैं और समझाने की कोशिश कर सकता हूं)...

तो चलिए इसे PHP में लागू करते हैं (यह मानते हुए कि $map और $reduce उपरोक्त के साथ तार हैं जो उनके साथ संक्षिप्तता के लिए निहित हैं):

$mapFunc = new MongoCode($map);
$reduceFunc = new MongoCode($reduce);
$query = array(
    'time' => array('$gte' => time() - (60*60*60*24*30)),
    'refer.external' => true
);
$collection = 'visits';
$command = array(
    'mapreduce' => $collection,
    'map' => $mapFunc,
    'reduce' => $reduceFunc,
    'query' => $query,
);

$statsInfo = $db->command($command);

$statsCollection = $db->selectCollection($sales['result']);

$stats = $statsCollection->find();

foreach ($stats as $stat) {
    echo $stats['_id'] .' Visited ';
    foreach ($stats['value']['types'] as $type => $times) {
        echo "Type $type $times Times, ";
    }
    foreach ($stats['value']['tags'] as $tag => $times) {
        echo "Tag $tag $times Times, ";
    }
    echo "\n";
}

ध्यान दें, मैंने इसका परीक्षण नहीं किया है। यह वही है जो मैंने आपके स्कीमा की मेरी समझ के आधार पर और मोंगो की मेरी समझ और इसके मानचित्र-कम करने के कार्यान्वयन के आधार पर निकाला है...



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो डीबी में नेस्टेड फ़ील्ड का चयन करें

  2. MongoDB में दिनांक को कैसे प्रारूपित करें

  3. मोंगोडब खोज ऑब्जेक्टिड के साथ काम नहीं कर रहा है

  4. MongoDb कोड 100 के साथ बंद हो जाता है

  5. स्रोत नियंत्रण के लिए बाइनरी के बजाय टेक्स्ट के रूप में MongoDB बैकअप