MongoDB教學
MongoDB快速入門
MongoDB歷史
MongoDB特點
MongoDB數據庫的優點
MongoDB安裝配置(Windows)
MongoDB安裝配置(Ubuntu)
MongoDB安裝配置(RedHat/CentOS)
MongoDB數據建模
MongoDB創建數據庫
MongoDB刪除數據庫
MongoDB創建集合
MongoDB刪除集合
MongoDB數據類型
MongoDB插入文檔
MongoDB查詢文檔
MongoDB更新文檔
MongoDB刪除文檔
MongoDB投影(選擇字段)
MongoDB限制記錄數
MongoDB排序記錄
MongoDB索引
MongoDB聚合
MongoDB複製
MongoDB分片
MongoDB備份與恢復
MongoDB部署
Java連接MongoDB操作
Python連接MongoDB操作
PHP連接MongoDB操作
Ruby連接MongoDB操作
MongoDB Map Reduce
根據MongoDB文檔的說明,Map-reduce是將大量數據合併爲有用的聚合結果的數據處理範例。 MongoDB使用mapReduce
命令進行map-reduce
操作。MapReduce通常用於處理大型數據集。
MapReduce命令
以下是基本 mapReduce
命令的語法 -
>db.collection.mapReduce(
function() {emit(key,value);}, //map function
function(key,values) {return reduceFunction}, { //reduce function
out: collection,
query: document,
sort: document,
limit: number
}
)
map-reduce
函數首先查詢集合,然後將結果文檔映射到發出的鍵值對,然後根據具有多個值的鍵進行減少。
在上面的語法 -
-
map
是一個JavaScript函數,它將一個值與一個鍵映射併發出一個鍵值對; -
reduce
是一個javascript功能,可以減少或分組具有相同鍵的所有文檔; -
out
指定map-reduce
查詢結果的位置; -
query
指定選擇文檔的可選選擇條件; -
sort
指定可選的排序條件; -
limit
指定可選的最大文檔數;
使用MapReduce
請考慮存儲用戶帖子的以下文檔結構。 該文檔存儲用戶的user_name
和帖子的狀態(status
)。
{
"post_text": "yiibai tutorials is an awesome website for tutorials",
"user_name": "maxsu",
"status":"active"
}
現在,我們將在posts
集上使用mapReduce
函數來選擇所有status
的值爲active
的帖子,並根據user_name
分組,然後使用以下代碼對每個用戶的帖子數進行計數 -
>db.posts.mapReduce(
function() { emit(this.user_id,1); },
function(key, values) {return Array.sum(values)}, {
query:{status:"active"},
out:"post_total"
}
)
以上mapReduce
查詢輸出以下結果 -
{
"result" : "post_total",
"timeMillis" : 9,
"counts" : {
"input" : 4,
"emit" : 4,
"reduce" : 2,
"output" : 2
},
"ok" : 1,
}
結果表明,共有4
個文檔與查詢(status
的值爲active
)匹配,映射函數發出4
個具有鍵值對的文檔,最後將具有相同鍵的reduce
函數分組的映射文檔分解爲2
。
要查看此 mapReduce 查詢的結果,請使用 find
運算符 -
>db.posts.mapReduce(
function() { emit(this.user_id,1); },
function(key, values) {return Array.sum(values)}, {
query:{status:"active"},
out:"post_total"
}
).find()
上述查詢給出以下結果,表明用戶 tom
和 maxsu
有兩個活動狀態的帖子 -
{ "_id" : "tom", "value" : 2 }
{ "_id" : "maxsu", "value" : 2 }
以類似的方式,MapReduce
查詢可用於構建大型複雜聚合查詢。 使用自定義JavaScript函數可以使用MapReduce,它非常靈活和強大。