MongoDB mapReduce命令

根據MongoDB文檔,Map reduce是一種數據處理范式,用于將大量數據壓縮成有用的聚合結果。MongoDB使用mapReduce命令進行map reduce操作。MapReduce通常用于處理大型數據集。

MapReduce 命令

以下是基本mapReduce命令的語法-

>db.collection.mapReduce(   
function() {emit(key,value);},  //map函數   
function(key,values) {return reduceFunction}, {   //reduce函數
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

map-reduce函數首先查詢集合,然后映射結果文檔以發(fā)出鍵-值對,然后根據具有多個值的鍵對其進行縮減。

在上面的語法中-

  • map 是一個javascript函數,該函數將一個鍵映射到一個值并發(fā)出一個鍵-值對

  • reduce 是一個javascript函數,用于減少或分組所有具有相同密鑰的文檔

  • out 指定map-reduce查詢結果的位置

  • query 指定用于選擇文檔的可選選擇標準

  • sort 指定可選的排序條件

  • limit 指定要返回的可選最大文檔數

使用MapReduce

考慮以下存儲用戶帖子的文檔結構。該文檔存儲用戶的user_name和發(fā)布狀態(tài)。

{
   "post_text": "nhooo is an awesome website for tutorials",
   "user_name": "mark",
   "status":"active"
}

現在,我們將在posts集合上使用mapReduce函數來選擇所有活動的帖子,根據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"),map函數發(fā)出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和mark都有兩個post處于活動狀態(tài)–

{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }

以類似的方式,MapReduce查詢可用于構造大型復雜的聚合查詢。自定義Javascript函數的使用利用了MapReduce,它非常靈活且功能強大。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清