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:最后返回文檔的個數。