MongoDB聚合查詢


1、count:查詢記錄條數

db.user.count()

它也跟find一樣可以有條件的

db.user.count({"age":22})

 

2、distinct:用來找出給定鍵的所有不同的值

db.user.distinct("num")

 

3、Group:分組查詢

key:用來分組文檔的字段,我們這里是對年齡分組

initial: 每組都分享一個”初始化函數“

$reduce: 執行的reduce函數,第一個參數是當前的文檔對象,第二個參數是上一次function操作的累計對象,有多少個文檔, $reduce就會調用多少次

db.user.group({
"key":{"age":true},
"initial":{"person":[]},
"$reduce":function(cur,prev){
    prev.person.push(cur.name);
}
})

 

如果想再過濾掉age小於20的人,group有這么兩個可選參數: condition 和 finalize

condition:執行過濾的條件

finalize:在reduce執行完成,結果集返回之前對結果集最終執行的函數。

db.user.group({
"key":{"age":true},
"initial":{"person":[]},
"$reduce":function(doc,out){
    out.person.push(doc.name);
},
"finalize":function(out){
out.count=out.person.length;
},
"condition":{"age":{$lt:20}}
})

 

4、MapReduce:

MongoDB中的MapReduce相當於關系數據庫中的group by。

參數:

map函數:這個稱為映射函數,里面會調用emit(key,value),集合會按照你指定的key進行映射分組。

reduce函數:這個稱為簡化函數,會對map分組后的數據進行分組簡化,注意:在reduce(key,value)中的key就是emit中的key,vlaue為emit分組后的emit(value)的集合,。

mapReduce函數:這個就是最后執行的函數,參數為map,reduce和一些可選參數。

 

示例:

map函數,對age大於10的進行處理:

var m=function(){
    if(this.age>10){
    emit(this.age,{name:this.name});
    }
}

reduce函數:

var r=function(key,values){
 var count=0;
 values.forEach(function(){count+=1;});
 return count;
}

執行:

db.user.mapReduce(m,r,{"out":"collection"})

查看輸出集合“collecton”的情況

db.collection.find()

從結果集也可以看出,臨時結果集中的_id是emit函數中的key。

從圖中我們可以看到如下信息:

result: "存放的集合名“。

input:傳入文檔的個數。

emit:此函數被調用的次數。

reduce:此函數被調用的次數。

output:最后返回文檔的個數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM