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

मोंगो कम फ़ंक्शन में दो क्षेत्रों में गिनती और अद्वितीय गणना की गणना कैसे करें

आप वास्तव में एमिट कॉल के दूसरे पैरामीटर पर मनमानी वस्तु पास कर सकते हैं। यानी आप इसका फायदा उठा सकते हैं और इसमें यूजर आईडी स्टोर कर सकते हैं। उदाहरण के लिए, आपका नक्शा फ़ंक्शन इस तरह दिख सकता है:

var mapFunc = function() {
  if (this.track_redirect) {
    var tempDoc = {};
    tempDoc[this.track_userid] = 1;

    emit(this.track_redirect, {
      users_clicked: tempDoc,
      total_clicks: 1
    });
  }
};

और आपका कम करें फ़ंक्शन इस तरह दिख सकता है:

var reduceFunc = function(key, values) {
  var summary = {
    users_clicked: {},
    total_clicks: 0
  };

  values.forEach(function (doc) {
    summary.total_clicks += doc.total_clicks;
    // Merge the properties of 2 objects together
    // (and these are actually the userids)
    Object.extend(summary.users_clicked, doc.users_clicked);
  });

  return summary;
};

सारांश ऑब्जेक्ट की उपयोगकर्ता_क्लिक की गई संपत्ति मूल रूप से प्रत्येक उपयोगकर्ता की आईडी को एक संपत्ति के रूप में संग्रहीत करती है (चूंकि आपके पास डुप्लिकेट गुण नहीं हो सकते हैं, आप गारंटी दे सकते हैं कि यह अद्वितीय उपयोगकर्ताओं को संग्रहीत करेगा)। यह भी ध्यान दें कि आपको इस तथ्य से सावधान रहना होगा कि कम करने वाले फ़ंक्शन को दिए गए कुछ मान पिछले कम करने का परिणाम हो सकते हैं और उपरोक्त नमूना कोड इसे ध्यान में रखता है। आप उक्त व्यवहार के बारे में यहां डॉक्स में अधिक जानकारी प्राप्त कर सकते हैं। ।

यूनिक काउंट प्राप्त करने के लिए, आप फ़ाइनलाइज़र फ़ंक्शन में पास कर सकते हैं जिसे कम चरण पूरा होने पर कॉल किया जाता है:

var finalFunc = function(key, value) {
  // Counts the keys of an object. Taken from:
  // http://stackoverflow.com/questions/18912/how-to-find-keys-of-a-hash
  var countKeys = function(obj) {
    var count = 0;

    for(var i in obj) {
      if (obj.hasOwnProperty(i))
      {
        count++;
      }
    }

    return count;
  };

  return {
    redirect: key,
    total_clicks: value.total_clicks,
    unique_clicks: countKeys(value.users_clicked)
  };
};

अंत में, आप इस तरह से काम को कम करने वाले मानचित्र को निष्पादित कर सकते हैं (अपनी आवश्यकताओं के अनुसार आउट विशेषता को संशोधित करें):

db.users.mapReduce(mapFunc, reduceFunc, { finalize: finalFunc, out: { inline: 1 }});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. dbref क्षेत्र द्वारा मोंगोडब समूह

  2. ऑब्जेक्ट आईडी के आधार पर नेस्टेड सरणी को एकत्रित और कम करें

  3. एकाधिक पहलुओं के साथ एकत्रीकरण फ्रेमवर्क सी # में पहलुओं का उपयोग करना, खोलना और क्रमबद्ध करना

  4. MongoDB - एक क्वेरी के परिणामों को क्रमबद्ध करें

  5. MongoDB स्कीमा डिज़ाइन - पदों पर मतदान