MapReduce एक अच्छा फिट हो सकता है जो क्लाइंट पर हेरफेर किए बिना सर्वर पर दस्तावेज़ों को संसाधित कर सकता है (क्योंकि डीबी सर्वर (ओपन इश्यू) पर एक स्ट्रिंग को विभाजित करने की सुविधा नहीं है।
map
से प्रारंभ करें समारोह। नीचे दिए गए उदाहरण में (जिसे और अधिक मजबूत होने की आवश्यकता है), प्रत्येक दस्तावेज़ को map
. पर भेज दिया गया है फ़ंक्शन (this
के रूप में) ) कोड summary
के लिए दिखता है फ़ील्ड है और यदि यह वहाँ है, तो इसे छोटा करें, एक स्थान पर विभाजित करें, और फिर एक 1
उत्सर्जित करें पाए गए प्रत्येक शब्द के लिए।
var map = function() {
var summary = this.summary;
if (summary) {
// quick lowercase to normalize per your requirements
summary = summary.toLowerCase().split(" ");
for (var i = summary.length - 1; i >= 0; i--) {
// might want to remove punctuation, etc. here
if (summary[i]) { // make sure there's something
emit(summary[i], 1); // store a 1 for each word
}
}
}
};
फिर, reduce
. में फ़ंक्शन, यह map
. द्वारा पाए गए सभी परिणामों का योग करता है फ़ंक्शन और प्रत्येक शब्द के लिए एक असतत कुल देता है जो emit
. था ऊपर टेड।
var reduce = function( key, values ) {
var count = 0;
values.forEach(function(v) {
count +=v;
});
return count;
}
अंत में, mapReduce निष्पादित करें:
> db.so.mapReduce(map, reduce, {out: "word_count"})
आपके नमूना डेटा के साथ परिणाम:
> db.word_count.find().sort({value:-1})
{ "_id" : "is", "value" : 3 }
{ "_id" : "bad", "value" : 2 }
{ "_id" : "good", "value" : 2 }
{ "_id" : "this", "value" : 2 }
{ "_id" : "neither", "value" : 1 }
{ "_id" : "or", "value" : 1 }
{ "_id" : "something", "value" : 1 }
{ "_id" : "that", "value" : 1 }