测试数据
for(var i=1;i<20;i++){
var num=i%10;
db.test.insert({"_id":i,"name":"user_"+i,"age":num});
}
![](http://images0.cnblogs.com/blog/516020/201311/01222001-cf5ead93268341ebbbab7fd879b17899.jpg)
group分组
db.test.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){
prev.num++
}})
![](http://images0.cnblogs.com/blog/516020/201311/01222111-0943e381b64646fca55a02876abe8842.jpg)
key:指定分组的键
initial:相当于计数器,统计每个组中的记录数
$reduce:这个函数有两个参数,doc代表当前文档,prev代表累加器文档(相当于本组当前的结果)
prev.num++就是每次增加一个
db.test.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){
prev.num++
},condition:{age:{$gt:2}}})
condition:分组的条件
![](http://images0.cnblogs.com/blog/516020/201311/01223645-50fac8b1d2e14647876b4d1df0ed63c6.jpg)
db.test.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){
prev.num++
},finalize:function(doc){doc.num=doc.num*2}})
finalize:对分组的结果再处理,测试时让num变成原来的两倍
![](http://images0.cnblogs.com/blog/516020/201311/01224633-746a23eddc4b4fe6a9d9bd803529a65d.jpg)