最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析mongodb中g(shù)roup分組

 更新時間:2015年05月12日 10:26:38   投稿:hebedich  
這篇文章主要介紹了淺析mongodb中g(shù)roup分組的實(shí)現(xiàn)方法及示例,非常的簡單實(shí)用,有需要的小伙伴可以參考下。

group做的聚合有些復(fù)雜。先選定分組所依據(jù)的鍵,此后MongoDB就會將集合依據(jù)選定鍵值的不同分成若干組。然后可以通過聚合每一組內(nèi)的文檔,產(chǎn)生一個結(jié)果文檔。
和數(shù)據(jù)庫一樣group常常用于統(tǒng)計(jì)。MongoDB的group還有很多限制,如:返回結(jié)果集不能超過16M, group操作不會處理超過10000個唯一鍵,好像還不能利用索引[不很確定]。

Group大約需要一下幾個參數(shù)。

 1.key:用來分組文檔的字段。和keyf兩者必須有一個
 2.keyf:可以接受一個javascript函數(shù)。用來動態(tài)的確定分組文檔的字段。和key兩者必須有一個
 3.initial:reduce中使用變量的初始化
 4.reduce:執(zhí)行的reduce函數(shù)。函數(shù)需要返回值。
 5.cond:執(zhí)行過濾的條件。
 6.finallize:在reduce執(zhí)行完成,結(jié)果集返回之前對結(jié)果集最終執(zhí)行的函數(shù)??蛇x的。
下面介紹一個實(shí)例:
先插入測試數(shù)據(jù):

for(var i=1; i<20; i++){
var num=i%6;
db.test.insert({_id:i,name:"user_"+i,age:num});
}

1.普通分組查詢

db.test.group({
            key:{age:true},
            initial:{num:0},
            $reduce:function(doc,prev){
               prev.num++
            }
           });

db.runCommand({group:
{
ns:"test",
key:{age:true},
initial:{num:0},
$reduce:function(doc,prev)
{
prev.num++
}
}
});

2.篩選后再分組

db.test.group({
key:{age:true},
initial:{num:0},
$reduce:function(doc,prev)
{
prev.num++
},
condition:{age:{$gt:2}}
});

db.runCommand({group:
{
ns:"test",
key:{age:true},
initial:{num:0},
$reduce:function(doc,prev)
{
prev.num++},
condition:{age:{$gt:2}}
}
});

3、普通的$where查詢:

db.test.find({$where:function(){
return this.age>2;
}
});

group聯(lián)合$where查詢

db.test.group({
key:{age:true},
initial:{num:0},
$reduce:function(doc,prev){
prev.num++
},
condition:{$where:function(){
return this.age>2;
}
}
});

4、使用函數(shù)返回值分組

//注意,$keyf指定的函數(shù)一定要返回一個對象
db.test.group({
$keyf:function(doc){return {age:doc.age};},
initial:{num:0},
$reduce:function(doc,prev){
prev.num++
}
});

db.runCommand({group:
{
ns:"test",
$keyf:function(doc){return {age:doc.age};},
initial:{num:0},
$reduce:function(doc,prev){
prev.num++}
}
});

5.使用終結(jié)器

db.test.group({
$keyf:function(doc){return {age:doc.age};},
initial:{num:0},
$reduce:function(doc,prev){
prev.num++
},
finalize: function(doc){ doc.count=doc.num;delete doc.num; }
});

db.runCommand({group:
{
ns:"test",
$keyf:function(doc){return {age:doc.age};},
initial:{num:0},
$reduce:function(doc,prev){
prev.num++},
finalize: function(doc){ doc.count=doc.num;delete doc.num; }
}
});

有關(guān)MapReduce

//首先插入測試數(shù)據(jù)
for(var i=1;i<21;i++)
{
db.test.insert({_id:i,name:'mm'+i});
}
//進(jìn)行mapreduce
db.runCommand(
{
mapreduce:'test',
map:function(){emit(this.name.substr(0,3),this);},
reduce:function(key,vals){return vals[0];}, //注意:vals是一個Object對象而不是數(shù)組
out:'wq'
});

注意:

1.mapreduce是根據(jù)map函數(shù)里調(diào)用的emit函數(shù)的第一個參數(shù)來進(jìn)行分組的
2.僅當(dāng)根據(jù)分組鍵分組后一個鍵匹配多個文檔,才會將key和文檔集合交由reduce函數(shù)處理。例如:

db.runCommand(
{
mapreduce:'test',
map:function(){emit(this.name.substr(0,3),this);},
reduce:function(key,vals){return 'wq';},
out:'wq'
});

執(zhí)行mapreduce命令后,再查看wq表數(shù)據(jù):

db.wq.find()

{ "_id" : "mm1", "value" : "wq" }
{ "_id" : "mm2", "value" : "wq" }
{ "_id" : "mm3", "value" : { "_id" : 3, "name" : "mm3" } }
{ "_id" : "mm4", "value" : { "_id" : 4, "name" : "mm4" } }
{ "_id" : "mm5", "value" : { "_id" : 5, "name" : "mm5" } }
{ "_id" : "mm6", "value" : { "_id" : 6, "name" : "mm6" } }
{ "_id" : "mm7", "value" : { "_id" : 7, "name" : "mm7" } }
{ "_id" : "mm8", "value" : { "_id" : 8, "name" : "mm8" } }
{ "_id" : "mm9", "value" : { "_id" : 9, "name" : "mm9" } }

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Mongodb多鍵索引中索引邊界的混合問題小結(jié)

    Mongodb多鍵索引中索引邊界的混合問題小結(jié)

    Mongodb為提高數(shù)組的查詢效率,針對數(shù)組構(gòu)建了多鍵索引,而Mongodb在應(yīng)用多鍵數(shù)組查詢時,也通過構(gòu)建,減少數(shù)組查詢的數(shù)值范圍,來提高查詢性能,本文結(jié)合Mongodb官方文檔,闡述Mongodb在使用多鍵索引時的邊界優(yōu)化,感興趣的朋友一起看看吧
    2024-07-07
  • MongoDB基礎(chǔ)入門之創(chuàng)建、刪除集合操作

    MongoDB基礎(chǔ)入門之創(chuàng)建、刪除集合操作

    這篇文章主要給大家介紹了關(guān)于MongoDB基礎(chǔ)入門之集合操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MongoDB數(shù)據(jù)庫基礎(chǔ)知識整理

    MongoDB數(shù)據(jù)庫基礎(chǔ)知識整理

    這篇文章介紹了MongoDB數(shù)據(jù)庫的基礎(chǔ)知識,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Mongodb副本集和分片示例詳解

    Mongodb副本集和分片示例詳解

    這篇文章主要給大家介紹了關(guān)于Mongodb副本集和分片的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mongodb具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 在MongoDB中實(shí)現(xiàn)時間范圍查詢的代碼詳解

    在MongoDB中實(shí)現(xiàn)時間范圍查詢的代碼詳解

    MongoDB作為一個高性能、開源、無模式的文檔型數(shù)據(jù)庫,廣泛應(yīng)用于各種需要靈活數(shù)據(jù)模型的應(yīng)用場景中,在處理與時間相關(guān)的數(shù)據(jù)時,MongoDB提供了強(qiáng)大的查詢能力,本文將詳細(xì)介紹如何在MongoDB中執(zhí)行時間范圍查詢,需要的朋友可以參考下
    2024-08-08
  • mongodb分片技術(shù)_動力節(jié)點(diǎn)Java學(xué)院整理

    mongodb分片技術(shù)_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了mongodb分片技術(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法

    Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法

    這篇文章主要介紹了Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法,本文詳細(xì)介紹了將mongoDB安裝為WinXP下系統(tǒng)服務(wù)的過程,需要的朋友可以參考下
    2014-10-10
  • MongoDB修改數(shù)據(jù)的2種方法

    MongoDB修改數(shù)據(jù)的2種方法

    這篇文章主要介紹了MongoDB修改數(shù)據(jù)的2種方法,需要的朋友可以參考下
    2014-05-05
  • MongoDB特點(diǎn)與體系結(jié)構(gòu)等簡介

    MongoDB特點(diǎn)與體系結(jié)構(gòu)等簡介

    今天小編就為大家分享一篇關(guān)于MongoDB特點(diǎn)與體系結(jié)構(gòu)等簡介,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mongodb replica set 添加刪除節(jié)點(diǎn)的2種方法

    mongodb replica set 添加刪除節(jié)點(diǎn)的2種方法

    replica set多服務(wù)器主從,添加,刪除節(jié)點(diǎn),肯定會經(jīng)常遇到的。下面詳細(xì)說明一下,添加,刪除節(jié)點(diǎn)的2種方法。
    2014-07-07

最新評論

铅山县| 泸定县| 阳东县| 盱眙县| 新丰县| 巴中市| 洛阳市| 青浦区| 宁津县| 安多县| 新昌县| 商都县| 迁西县| 门头沟区| 登封市| 四平市| 万全县| 金寨县| 九龙城区| 马龙县| 新河县| 鄂州市| 天津市| 花垣县| 西安市| 淄博市| 长泰县| 泰安市| 武安市| 岫岩| 平湖市| 获嘉县| 泌阳县| 进贤县| 宜黄县| 平潭县| 休宁县| 陇南市| 永德县| 望奎县| 砚山县|