MongoDB - Pengurangan Peta
Sesuai dokumentasi MongoDB, Map-reduceadalah paradigma pemrosesan data untuk memadatkan volume data yang besar menjadi hasil agregat yang berguna. MongoDB menggunakanmapReduceperintah untuk operasi pengurangan peta. MapReduce umumnya digunakan untuk memproses kumpulan data yang besar.
Perintah MapReduce
Berikut ini adalah sintaks dari perintah mapReduce dasar -
>db.collection.mapReduce(
function() {emit(key,value);}, //map function
function(key,values) {return reduceFunction}, { //reduce function
out: collection,
query: document,
sort: document,
limit: number
}
)
Fungsi pengurangan peta pertama-tama mengkueri kumpulan, lalu memetakan dokumen hasil untuk memancarkan pasangan nilai kunci, yang kemudian dikurangi berdasarkan kunci yang memiliki beberapa nilai.
Dalam sintaks di atas -
map adalah fungsi javascript yang memetakan nilai dengan kunci dan memancarkan pasangan nilai kunci
reduce adalah fungsi javascript yang mengurangi atau mengelompokkan semua dokumen yang memiliki kunci yang sama
out menentukan lokasi hasil kueri pengurangan peta
query menentukan kriteria pemilihan opsional untuk memilih dokumen
sort menentukan kriteria pengurutan opsional
limit menentukan jumlah dokumen maksimum opsional yang akan dikembalikan
Menggunakan MapReduce
Pertimbangkan struktur dokumen berikut yang menyimpan posting pengguna. Dokumen menyimpan nama_user pengguna dan status posting.
{
"post_text": "tutorialspoint is an awesome website for tutorials",
"user_name": "mark",
"status":"active"
}
Sekarang, kita akan menggunakan fungsi mapReduce di file posts koleksi untuk memilih semua posting aktif, kelompokkan berdasarkan user_name dan kemudian hitung jumlah posting oleh setiap pengguna menggunakan kode berikut -
>db.posts.mapReduce(
function() { emit(this.user_id,1); },
function(key, values) {return Array.sum(values)}, {
query:{status:"active"},
out:"post_total"
}
)
Kueri mapReduce di atas menghasilkan hasil sebagai berikut -
{
"result" : "post_total",
"timeMillis" : 9,
"counts" : {
"input" : 4,
"emit" : 4,
"reduce" : 2,
"output" : 2
},
"ok" : 1,
}
Hasilnya menunjukkan bahwa total 4 dokumen cocok dengan query (status: "aktif"), fungsi map mengeluarkan 4 dokumen dengan key-value pair dan terakhir fungsi reduce mengelompokkan dokumen yang dipetakan yang memiliki kunci yang sama menjadi 2.
Untuk melihat hasil dari query mapReduce ini, gunakan operator find -
>db.posts.mapReduce(
function() { emit(this.user_id,1); },
function(key, values) {return Array.sum(values)}, {
query:{status:"active"},
out:"post_total"
}
).find()
Kueri di atas memberikan hasil berikut yang menunjukkan bahwa kedua pengguna tom dan mark memiliki dua pos dalam status aktif -
{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }
Dengan cara yang sama, kueri MapReduce dapat digunakan untuk membuat kueri agregasi kompleks yang besar. Penggunaan fungsi Javascript khusus memanfaatkan MapReduce yang sangat fleksibel dan kuat.