在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ MongoDB Map Reduce
MongoDB教程
MongoDB覆蓋查詢
MongoDB數(shù)據(jù)建模
MongoDB聚合
MongoDB更改用戶密碼和自定義數(shù)據(jù)
MongoDB用戶
MongoDB分片
MongoDB創(chuàng)建集合
MongoDB文本搜索
MongoDB數(shù)據(jù)類(lèi)型
MongoDB GridFS
MongoDB索引限制
MongoDB插入文檔
MongoDB刪除集合
MongoDB數(shù)據(jù)庫(kù)引用
MongoDB復(fù)制
MongoDB Map Reduce
Python連接MongoDB操作
MongoDB原子操作
MongoDB特點(diǎn)
MongoDB安全檢查表
MongoDB排序記錄
MongoDB自動(dòng)遞增序列
MongoDB安裝配置(Windows)
MongoDB備份與恢復(fù)
MongoDB安裝配置(Ubuntu)
Ruby連接MongoDB操作
MongoDB部署
MongoDB索引
MongoDB分析查詢
MongoDB投影(選擇字段)
MongoDB刪除數(shù)據(jù)庫(kù)
MongoDB認(rèn)證
MongoDB限制記錄數(shù)
MongoDB添加用戶
MongoDB固定循環(huán)集合
MongoDB高級(jí)索引
MongoDB數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
MongoDB快速入門(mén)
MongoDB創(chuàng)建數(shù)據(jù)庫(kù)
MongoDB啟用身份驗(yàn)證
MongoDB歷史
MongoDB管理用戶和角色
MongoDB安裝配置(RedHat/CentOS)
MongoDB刪除文檔
Java連接MongoDB操作
MongoDB正則表達(dá)式
MongoDB查詢文檔
MongoDB關(guān)聯(lián)關(guān)系
PHP連接MongoDB操作
MongoDB更新文檔
MongoDB ObjectId

MongoDB Map Reduce

根據(jù)MongoDB文檔的說(shuō)明,Map-reduce是將大量數(shù)據(jù)合并為有用的聚合結(jié)果的數(shù)據(jù)處理范例。 MongoDB使用mapReduce命令進(jìn)行map-reduce操作。MapReduce通常用于處理大型數(shù)據(jù)集。

MapReduce命令

以下是基本 mapReduce 命令的語(yǔ)法 -

>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函數(shù)首先查詢集合,然后將結(jié)果文檔映射到發(fā)出的鍵值對(duì),然后根據(jù)具有多個(gè)值的鍵進(jìn)行減少。

在上面的語(yǔ)法 -

  • map是一個(gè)JavaScript函數(shù),它將一個(gè)值與一個(gè)鍵映射并發(fā)出一個(gè)鍵值對(duì);
  • reduce是一個(gè)javascript功能,可以減少或分組具有相同鍵的所有文檔;
  • out指定map-reduce查詢結(jié)果的位置;
  • query指定選擇文檔的可選選擇條件;
  • sort指定可選的排序條件;
  • limit指定可選的最大文檔數(shù);

使用MapReduce

請(qǐng)考慮存儲(chǔ)用戶帖子的以下文檔結(jié)構(gòu)。 該文檔存儲(chǔ)用戶的user_name和帖子的狀態(tài)(status)。

{
   "post_text": "yiibai tutorials is an awesome website for tutorials",
   "user_name": "maxsu",
   "status":"active"
}

現(xiàn)在,我們將在posts集上使用mapReduce函數(shù)來(lái)選擇所有status的值為active的帖子,并根據(jù)user_name分組,然后使用以下代碼對(duì)每個(gè)用戶的帖子數(shù)進(jìn)行計(jì)數(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個(gè)文檔與查詢(status的值為active)匹配,映射函數(shù)發(fā)出4個(gè)具有鍵值對(duì)的文檔,最后將具有相同鍵的reduce函數(shù)分組的映射文檔分解為2。

要查看此 mapReduce 查詢的結(jié)果,請(qǐng)使用 find 運(yùn)算符 -

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

).find()

上述查詢給出以下結(jié)果,表明用戶 tommaxsu 有兩個(gè)活動(dòng)狀態(tài)的帖子 -

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

以類(lèi)似的方式,MapReduce查詢可用于構(gòu)建大型復(fù)雜聚合查詢。 使用自定義JavaScript函數(shù)可以使用MapReduce,它非常靈活和強(qiáng)大。


上一篇:Ruby連接MongoDB操作下一篇:MongoDB用戶