Mongodb 的中資料統計神器Map_Reduce的使用
Map -reduce 就是先把資料拆分然後合併的的一種思想,在map 方法中至少要呼叫一次內建函式emit,該函式需要兩個引數,第一個是引數key,可以理解為關聯式資料庫中的group by 的欄位,第二個引數是value,也就是要進行聚合操作的欄位。emit 的作用是根據key ,把value組合為一個陣列,為reduce提供輸入引數值。執行reduce 處理,需要用兩個引數,第一個引數是key 第二個引數是value陣列,也就是上一步中產生的結果。在這個函式裡進行聚合處理,並返回處理後的物件,對上一步的結果進行finalize處理。把結果輸出到out指定的目標(v1.7 以上版本可以指定out{inline :1}直接返回結果集)例如:
db.users.mapReduce(m, r, {out : {inline : 1}})
MongoDB中使用emit函式向MapReduce提供Key/Value對。Reduce函式接受兩個引數:Key,emits. Key即為emit函式中的Key。 emits是一個陣列,它的元素就是emit函式提供的Value。Reduce函式的返回結果必須要能被Map或者Reduce重複使用,所以返回結果必須與emits中元素結構一致。Map或者Reduce函式中的this關鍵字,代表當前被Mapping文件。
map = %Q{
function(){
emit({userinfo_id:this.userinfo_id,customer_id:this.customer_id},{paycost:this.paycost})
}
}
reduce = %Q{
function(key,values){
var res={order_count:0,order_amount:0.0}
values.forEach(function(val){
res.order_count += 1;
if(!isNaN(val.paycost) && val.paycost!=""){
res.order_amount = res.order_amount +parseFloat(val.paycost);
}
});
return res;
}
}
results = OrderStateChange.where({'customer_id'=>analyse_infos[:customer_id],'userinfo_id'=>analyse_infos[:userinfo_id],'state'=>{'$in' => ['receive','completed']}}).map_reduce(map, reduce).out(inline: true)
這種操作最終將會按照我們設定的方式返回的資訊{_id:{userinfo_id:“121212”,customer_id:“23322”},value:{paycost:30}}
map中的引數的其實就是為reduce 提供(key ,value),key 和value都是可以封裝多個引數的如emit({userinfo_id:this.userinfo_id,customer_id:this.customer_id},{paycost:this.paycost})
這個emit中的key 就是{userinfo_id:this.userinfo_id,customer_id:this.customer_id},value就是{paycost:this.paycost}。mongodb 中MR的使用可以非常大的提升資料的查詢和統計速度。真是屢試不爽
相關文章
- DataTable中資料記錄的統計 (轉)
- MongoDB--Mongodb 中資料匯出與匯入MongoDB
- NodeJs中資料庫的使用NodeJS資料庫
- MySQL如何按周統計表中資料MySql
- plsql中資料生成工具data generator的使用SQL
- Mysql 5.7中資料量更改統計資料收集的邏輯MySql
- MongoDB中如何使用統計count()方法?MongoDB
- 【vue3】學習對store中資料的使用Vue
- 同步整合不同系統、不同資料庫中資料的問題資料庫
- MongoDB - 資料模型的設計模式MongoDB模型設計模式
- 機器學習中資料清洗的藝術機器學習
- MongoDB的使用MongoDB
- Redis在.net中的使用(4)常見的集中資料結構Redis資料結構
- mongodb資料庫使用03、python和mongodb的互動MongoDB資料庫Python
- MongoDB資料庫的設計規範MongoDB資料庫
- 使用FNDCPASS修改EBS中資料庫和應用使用者的密碼資料庫密碼
- MongoDB從入門到實戰之.NET Core使用MongoDB開發ToDoList系統(3)-系統資料集合設計MongoDB
- MySQL中資料型別的驗證MySql資料型別
- 爬蟲中資料清洗的選擇爬蟲
- Linux中資料夾的解讀Linux
- mongodb分組統計MongoDB
- oracle中資料倉儲的一些主要計算函式Oracle函式
- [zt] 使用FNDCPASS修改EBS中資料庫和應用使用者的密碼資料庫密碼
- js判斷json中資料的真假JSON
- Sql表和Excel中資料的轉移SQLExcel
- 銷售憑證中資料的類別
- 使用@Validated校驗List集合中資料失效
- mongodb的設計特徵MongoDB特徵
- MongoDB和Redis的使用MongoDBRedis
- MongoDB aggregate做統計資料(group進階)。MongoDB
- 內網穿透神器 Ngrok 的使用內網穿透
- 分散式系統中資料儲存方案實踐分散式
- Linux系統中資料盤建立軟RaidLinuxAI
- xml與資料庫中資料的匯入匯出XML資料庫
- 機器學習中資料缺失的處理及建模方法機器學習
- Android中資料儲存的方式有哪些Android
- 表中資料的更改量儲存檢視
- Java程式設計中資源物件管理的進化Java程式設計物件