標籤:
Map-Reduce是一種計算模型,簡單的說就是將大批量的工作(資料)分解(MAP)執行,然後再將結果合并成最終結果(REDUCE)。
MapReduce命令基本文法:
db.collection.mapReduce(
function() {emit(key,value);}, //map 函數
function(key,values) {return reduceFunction}, //reduce 函數
{
out: collection,
query: document,
sort: document,
limit: number
}
)
使用 MapReduce 要實現兩個函數 Map 函數和 Reduce 函數,Map 函數調用 emit(key, value), 遍曆 collection 中所有的記錄, 將key 與 value 傳遞給 Reduce 函數進行處理。
Map 函數必須調用 emit(key, value) 返回索引值對。
參數說明:
map:映射函數 (產生索引值對序列,作為 reduce 函數參數)。
reduce: 統計函數,reduce函數的任務就是將key-values變成key-value,也就是把values數組變成一個單一的值value。
out: 統計結果存放集合 (不指定則使用臨時集合,在用戶端斷開後自動刪除)。
query: 一個篩選條件,只有滿足條件的文檔才會調用map函數。(query,limit,sort可以隨意組合)
sort: 和limit結合的sort排序參數(也是在發往map函數前給文檔排序),可以最佳化分組機制。
limit: 發往map函數的文檔數量的上限(要是沒有limit,單獨使用sort的用處不大)
使用樣本:
db.posts.mapReduce(
function() { emit(this.user_name,1); },
function(key, values) {return Array.sum(values)},
{
query:{status:"active"},
out:"post_total"
}
).find()
MongoDB Map Reduce