亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mongodb中MapReduce實現(xiàn)數(shù)據(jù)聚合方法詳解

 更新時間:2016年05月23日 14:24:57   作者:萬里飛鷹  
Mongodb是針對大數(shù)據(jù)量環(huán)境下誕生的用于保存大數(shù)據(jù)量的非關(guān)系型數(shù)據(jù)庫,針對大量的數(shù)據(jù)。接下來通過本文給大家介紹Mongodb中MapReduce實現(xiàn)數(shù)據(jù)聚合方法詳解,感興趣的朋友一起學(xué)習(xí)吧

Mongodb是針對大數(shù)據(jù)量環(huán)境下誕生的用于保存大數(shù)據(jù)量的非關(guān)系型數(shù)據(jù)庫,針對大量的數(shù)據(jù),如何進行統(tǒng)計操作至關(guān)重要,那么如何從Mongodb中統(tǒng)計一些數(shù)據(jù)呢?

在Mongodb中,給我們提供了三種用于數(shù)據(jù)聚合的方式:

(1)簡單的用戶聚合函數(shù);

(2)使用aggregate進行統(tǒng)計;

(3)使用mapReduce進行統(tǒng)計;

今天我們首先來講講mapReduce是如何統(tǒng)計,在后續(xù)的文章中,將另起文章進行相關(guān)說明。

MapReduce是啥呢?以我的理解,其實就是對集合中的各個滿足條件的文檔進行預(yù)處理,整理出想要的數(shù)據(jù)然后進行統(tǒng)計得到最終的統(tǒng)計結(jié)果。其中map函數(shù)用于對集合中的各個滿足條件的文檔進行預(yù)處理,整理出想要的數(shù)據(jù)。Reduce函數(shù)用于對整理出的數(shù)據(jù)進行處理得到統(tǒng)計結(jié)果。Map函數(shù)和Reduce函數(shù)都是JavaScript函數(shù)。

首先,我們先構(gòu)造一個測試數(shù)據(jù)集test,使用js腳本往集合中隨機插入一組數(shù)據(jù),每條記錄是哪個人花了多少錢買了什么東西。具體腳本test1.js如下:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;">for( var i=0; i<100; i++){ 
var rID=Math.floor(Math.random()*10); 
var price = parseFloat((Math.random()*10).toFixed(2)); 
if(rID<3){ 
db.test.insert({"user":"majing","sku":rID,"price":price}); 
} 
else if(rID>=3 && rID<5){ 
db.test.insert({"user":"wufenglei","sku":rID,"price":price}); 
} 
else if(rID>=5 && rID<8){ 
db.test.insert({"user":"wufenglei","sku":rID,"price":price}); 
} 
else { 
db.test.insert({"user":"liyonghu","sku":rID,"price":price}); 
} 
}</span></span> 

接下來我們通過在控制臺執(zhí)行腳本來向數(shù)據(jù)庫插入具體的數(shù)據(jù),具體執(zhí)行指令如下:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;">mongo 127.0.0.1:27017/test J:/test1.js</span></span> 

執(zhí)行之后,通過MongoVUE來查看下具體的數(shù)據(jù),如下所示,數(shù)據(jù)已經(jīng)插入到集合中了:

接下來,我們可以做幾個簡單的統(tǒng)計操作了。

(1)統(tǒng)計不同用戶都買了多少個商品?編寫js腳本test2.js,將結(jié)果保存到statis1集合中。

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">map=function(){ 
emit(this.user,1); 
} 
reduce=function(key, values){ 
var count = 0; 
values.forEach(function(val){count += val}); 
return count; 
} 
db.test.mapReduce(map, reduce, {out:"statics1"});</span></span></span> 

按照剛才執(zhí)行腳本的方式執(zhí)行test2.js,并查看數(shù)據(jù):

從數(shù)據(jù)庫就可以直觀看到統(tǒng)計數(shù)據(jù)了,若想查看某個人如majing購買了多少個商品,直接使用

<span style="font-family:KaiTi_GB2312;">
<span style="font-size:18px;">
<span style="font-size:18px;">
<span style="font-family:KaiTi_GB2312;font-size:18px;">db.statics1.find({"_id":"majing"});
</span>
</span>
</span>
</span> 

(2)統(tǒng)計每個用戶購買的每個商品的數(shù)量情況

腳本test3.js如下所示:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">map=function(){ 
emit({user:this.user,sku:this.sku},1); 
} 
reduce=function(key, values){ 
var count = 0; 
values.forEach(function(val){count += val}); 
return count; 
} 
db.test.mapReduce(map, reduce, {out:"statics2"});</span></span></span> 

按照剛才執(zhí)行腳本的方式執(zhí)行test3.js,并查看數(shù)據(jù):

總共返回了10條記錄。此時如果我們想查找某個用戶購買商品的情況,可以使用下面的查詢方法:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">db.statics2.find({"_id.user":"majing"});</span></span></span> 

如果我們想查找某個用戶購買某個商品的情況,可以使用下面的查詢方法:

(3)統(tǒng)計每個用戶購買商品的總量及花費的總金額

腳本test4.js如下所示:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">map=function(){ 
emit({user:this.user},{totalprice:this.price,count:1}); 
} 
reduce=function(key, values){ 
var res = {totalprice:0.00,count:1}; 
values.forEach(function(val){res.totalprice += val.totalprice;res.count+=val.count;}); 
return res; 
} 
db.test.mapReduce(map, reduce, {out:"statics3"});</span></span></span> 

按照剛才執(zhí)行腳本的方式執(zhí)行test4.js,并查看數(shù)據(jù):

(4)統(tǒng)計每個用戶購買商品的平均價錢

在這個情景下,我們需要用到說道m(xù)apReduce里的另一個參數(shù)finalize,該參數(shù)是一個javascript腳本函數(shù),用于對reduce后的集合進行一個后期處理操作。

執(zhí)行腳本test5.js,具體如下所示:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">map=function(){ 
emit({user:this.user},{totalprice:this.price,count:1}); 
} 
reduce=function(key, values){ 
var res = {totalprice:0.00,count:1,average:0}; 
values.forEach(function(val){res.totalprice += val.totalprice;res.count+=val.count;}); 
return res; 
} 
finalizeFunc=function(key,reduceResult){ 
reduceResult.totalprice=(reduceResult.totalprice).toFixed(2); 
reduceResult.average=(reduceResult.totalprice/reduceResult.count).toFixed(2); 
return reduceResult; 
} 
db.test.mapReduce(map, reduce, {out:"statics4",finalize:finalizeFunc});</span></span></span> 

執(zhí)行之后查看得到的數(shù)據(jù),具體如下所示,顯示了總價錢,商品數(shù)量和商品單價。

如果想查找某個人的,可以和上面的查詢方法一樣,使用find()方法進行查詢:

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"><span style="font-size:18px;">db.statics4.find({"_id.user":"majing"});</span></span></span> 

以上通過4個簡單的例子對Mongodb中的MapReduce進行了簡單的說明,當然MapReduce功能很強大,大家如果想知道其他高級的使用方法,可以到Mongodb的官網(wǎng)進行查閱和學(xué)習(xí),網(wǎng)址為

https://docs.mongodb.com/manual/reference/method/db.collection.mapReduce/ 謝謝。

以上所述是小編給大家介紹的Mongodb中MapReduce實現(xiàn)數(shù)據(jù)聚合方法詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • MongoDB數(shù)據(jù)庫基礎(chǔ)操作總結(jié)

    MongoDB數(shù)據(jù)庫基礎(chǔ)操作總結(jié)

    這篇文章主要介紹了MongoDB數(shù)據(jù)庫基礎(chǔ)操作,結(jié)合實例形式總結(jié)分析了MongoDB數(shù)據(jù)庫創(chuàng)建、刪除、集合、文檔等基本操作技巧,需要的朋友可以參考下
    2020-06-06
  • MongoDB插入、更新、刪除文檔實現(xiàn)代碼

    MongoDB插入、更新、刪除文檔實現(xiàn)代碼

    本文通過實例代碼給大家簡單介紹了mongodb插入、更新、刪除文檔的方法,需要的的朋友參考下吧
    2017-04-04
  • MongoDB自動刪除過期數(shù)據(jù)的方法(TTL索引)

    MongoDB自動刪除過期數(shù)據(jù)的方法(TTL索引)

    這篇文章主要給大家介紹了關(guān)于MongoDB自動刪除過期數(shù)據(jù)(TTL索引)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • centos yum 安裝 mongodb 以及php擴展

    centos yum 安裝 mongodb 以及php擴展

    MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
    2014-07-07
  • Mongodb 副本集搭建問題總結(jié)及解決辦法

    Mongodb 副本集搭建問題總結(jié)及解決辦法

    這篇文章主要介紹了Mongodb 副本集搭建問題總結(jié)及解決辦法的相關(guān)資料,在Mongodb 副本集搭建過程中會遇到很多問題,這里就對常見問題進行總結(jié)并提供解決辦法,需要的朋友可以參考下
    2016-12-12
  • MongoDB超大塊數(shù)據(jù)問題解決

    MongoDB超大塊數(shù)據(jù)問題解決

    這篇文章主要為大家介紹了MongoDB超大塊數(shù)據(jù)問題的技術(shù)瓶頸解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 分享MongoDB修改oplog大小的4種方法

    分享MongoDB修改oplog大小的4種方法

    這篇文章主要介紹了分享MongoDB修改oplog大小的4種方法,文章基于MongoDB修改oplog大小展開其方法的介紹,需要的小伙伴可以參考一下
    2022-04-04
  • Mongodb 利用mongoshell進行數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)方法

    Mongodb 利用mongoshell進行數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)方法

    下面小編就為大家分享一篇Mongodb 利用mongoshell進行數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • MongoDB使用指南--基本操作

    MongoDB使用指南--基本操作

    上篇文章,我們講訴了MongoDB數(shù)據(jù)庫的用戶操作,本文將介紹如何基本操作MongoDB數(shù)據(jù)庫,當然是基本的,最基本的操作,需要的朋友可以參考下
    2014-08-08
  • Mongodb的oplog詳解

    Mongodb的oplog詳解

    這篇文章主要介紹了Mongodb的oplog詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論