MapReduce mungkin cocok yang dapat memproses dokumen di server tanpa melakukan manipulasi pada klien (karena tidak ada fitur untuk membagi string di server DB (masalah terbuka).
Mulailah dengan map fungsi. Pada contoh di bawah ini (yang mungkin perlu lebih kuat), setiap dokumen diteruskan ke map fungsi (sebagai this ). Kode mencari summary bidang dan jika ada, huruf kecil, pisahkan pada spasi, dan kemudian memancarkan 1 untuk setiap kata yang ditemukan.
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
}
}
}
};
Kemudian, di reduce fungsi, itu menjumlahkan semua hasil yang ditemukan oleh map fungsi dan mengembalikan total diskrit untuk setiap kata yang emit tercantum di atas.
var reduce = function( key, values ) {
var count = 0;
values.forEach(function(v) {
count +=v;
});
return count;
}
Terakhir, jalankan mapReduce:
> db.so.mapReduce(map, reduce, {out: "word_count"})
Hasil dengan data sampel Anda:
> 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 }