search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

[MongoDB] 聚合操作概念 - 使用 mapReduce() 範例 - Carlos-Studio

此篇文章瀏覽量: 282

基本概念

  • 對映(map)
  • 歸納(reduce)
  • 定型(finalize,這是 option)

主要是以下步驟:‌

  • 執行前處理:在執行 MapReduce 前,先對集合內的資料進行篩選或排序的處理。
  • 執行 Map 函式:Map 函式主要的功能是定義分群規則與分群後的資料內容。
  • 執行 Reduce 函式:Reduce 函式主要的功能是合併群組內的資料。
  • 設定輸出位置。
  • mapReduce 執行結果。

mapReduce() 的語法如下:

db.collection.mapReduce(
  ,                  // 對映(map)函式
  ,               // 歸納(reduce)函式
  // options 以下為可輸入的參數
  {
    out: ,    // 要輸出的集合名稱
    query: ,    // 查詢式
    sort: ,     // 排序
    limit: ,      // 限制資料數量
    finalize: , // 定型(finalize)函式
    scope: ,    // 全域變數可以被 map、reduce、finalize 函式存取
    jsMode: ,    // 將 map 與 reduce 傳遞的資料使用 JavaScript 的 objects
    verbose: ,   // 是否包含處理時間的資訊
  }
)

也可以將 mapReduce 結果 results 不輸出至集合來直接顯示,透過在 mapReduce 的 outline 改輸入為 out: {inline: 1} 即可。

範例:計算來自台北市各個行政區之消費者的總人數與平均年齡

var fnmap = function(){
    emit(
        this.district,
        {count: 1, age: this.age}
    )
}

var fnreduced = function(key, values){
    var reduced = {count: 0, age: 0}
    for(var idx = 0; idx < values.length; idx++){
        var val = values[idx]
        reduced.age += val.age
        reduced.count += val.count
    }
    return reduced
}

var fnfinalized = function(key, reduced){
    reduced.avgAge = reduced.age / reduced.count;
    return reduced
}

db.getCollection('customers').mapReduce(
    fnmap,
    fnreduced,
    {
        query: {city: '台北市'},
        finalize: fnfinalized,
        out: {inline: 1}
    }
)

若覺得文章有幫助,請多分享,讓其他同好也能吸收網站技能知識。



熱門推薦

本文由 carlos-studiocom 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦