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

MongoDB MapReduce अद्यतन स्थान पर कैसे करें

आप निश्चित रूप से ऐसा कर सकते हैं। मैं एक-एक करके आपके प्रश्नों का समाधान करूंगा:

1. आप अपने मैप-रिड्यूस के साथ एक क्वेरी निर्दिष्ट कर सकते हैं, जो ऑब्जेक्ट्स के सेट को फ़िल्टर करती है जिसे मैप चरण में पास किया जाएगा। मोंगो खोल में, यह इस तरह दिखेगा (मानते हुए m और r क्रमशः आपके मैपर और रेड्यूसर फ़ंक्शंस के नाम हैं):

> db.coll.mapReduce(m, r, {query: {$or: [{"recently-voted": true}, {"hourly-score": {$gt: 0}}]}})

2.चरण #1 आपको अंतिम घंटे में कम से कम एक वोट के साथ सभी दस्तावेज़ों पर अपने मैपर का उपयोग करने देगा (या recently-voted के साथ सत्य पर सेट), लेकिन सभी वोट अंतिम घंटे में नहीं होंगे। इसलिए आपको अपने मैपर में सूची को फ़िल्टर करना होगा, और केवल उन वोटों को छोड़ना होगा जिन्हें आप गिनना चाहते हैं:

function m() {
  var hour_ago = new Date() - 3600000;
  this.votes.forEach(function (vote) {
    if (vote.ts > hour_ago) {
      emit(/* your key */, this.vote.a);
    }
  });
}

और कम करने के लिए:

function r(key, values) {
  var sum = 0;
  values.forEach(function(value) { sum += value; });
  return sum;
}

3. प्रति घंटा स्कोर तालिका को अपडेट करने के लिए, आप reduceOutput . का उपयोग कर सकते हैं मैप-रिड्यूस का विकल्प, जो आपके रेड्यूसर को उत्सर्जित मूल्यों और आउटपुट संग्रह में पहले से सहेजे गए मान, (यदि कोई हो) के साथ कॉल करेगा। उस पास का परिणाम आउटपुट संग्रह में सहेजा जाएगा। ऐसा दिखता है:

> db.coll.mapReduce(m, r, {query: ..., out: {reduce: "output_coll"}})

आउटपुट को फिर से कम करने के अलावा, आप merge . का उपयोग कर सकते हैं जो नए बनाए गए लोगों के साथ आउटपुट संग्रह में दस्तावेज़ों को अधिलेखित कर देगा (लेकिन _id वाले किसी भी दस्तावेज़ को पीछे छोड़ देगा) _id . से अलग आपके एम-आर जॉब द्वारा निर्मित), replace , जो प्रभावी रूप से एक ड्रॉप-एंड-क्रिएट ऑपरेशन है और डिफ़ॉल्ट है, या {inline: 1} का उपयोग करें , जो परिणामों को सीधे शेल या आपके ड्राइवर को लौटा देगा। ध्यान दें कि {inline: 1} . का उपयोग करते समय , आपके परिणाम एकल दस्तावेज़ के लिए अनुमत आकार में फिट होने चाहिए (हाल ही में MongoDB रिलीज़ में 16MB)।

(4.) आप सेकेंडरी ("दास") पर मैप-रिड्यूस जॉब चला सकते हैं, लेकिन चूंकि सेकेंडरी राइट्स को स्वीकार नहीं कर सकते हैं (यही उन्हें सेकेंडरी बनाता है), आप केवल इनलाइन आउटपुट का उपयोग करते समय ऐसा कर सकते हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कम से कम एक संबद्ध वस्तु के साथ रिकॉर्ड प्राप्त करें

  2. मोंगोडब 3.0 जावा सम्मिलित करेंएक

  3. नेवला में स्कीमा और मॉडल दोनों क्यों होते हैं?

  4. django 1.8 . के साथ एकाधिक डेटाबेस (mongodb[mongoengine] और sql )

  5. GoLang में डेटा स्रोत के रूप में MongoDB का उपयोग करना