亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

MongoDB mapReduce命令

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

MapReduce 命令

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

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

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

在上面的語法中-

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

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

  • out 指定map-reduce查詢結(jié)果的位置

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

  • sort 指定可選的排序條件

  • limit 指定要返回的可選最大文檔數(shù)

使用MapReduce

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

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

現(xiàn)在,我們將在posts集合上使用mapReduce函數(shù)來選擇所有活動的帖子,根據(jù)user_name將它們分組,然后使用以下代碼對每個用戶的帖子數(shù)進行計數(shù)-

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
	
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

上面的mapReduce查詢輸出以下結(jié)果-

{
   "result" : "post_total",
   "timeMillis" : 9,
   "counts" : {
      "input" : 4,
      "emit" : 4,
      "reduce" : 2,
      "output" : 2
   },
   "ok" : 1,}

結(jié)果顯示,總共有4個文檔與查詢匹配(status:"active"),map函數(shù)發(fā)出4個具有鍵值對的文檔,最后reduce函數(shù)將具有相同鍵的映射文檔分為2個。

要查看此mapReduce查詢的結(jié)果,請使用find運算符-

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
	
).find()

上面的查詢給出了以下結(jié)果,表明用戶tom和mark都有兩個post處于活動狀態(tài)–

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

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