mongoDB聚合

1 cout.返回文档的总数量:db.dbname.count(),也可以指定查询db.dbname.count({"x":"1"})增加查询条件会使count变慢。

2 distinct用来找出给定键的所有不同的值。必须指定集合和键。db.runCommand({"distinct":"people","key":"age"}) 得到{"value":{20,35,60},"ok":1}

3 group先选定分组所依据的键,而后MongoDB就会将集合依据选定的不同分为若干组。然后通过聚合每一组的文档,产生一个结果文档。

       

想获得每天最后的价格报表。可以先把集合按照天分组,然后在每一组取包含最新时间戳的文档,将其放置到结果中

                   

"ns":"stocks"指定要分组的集合。

"key":"day"指定文档分组的依据键。按天分组

"initial":"{"time":0}"每一组reduce函数调用的初始时间,会作为初始文档传递给后续过程。每一组的所有成员都会使用这个累加器,所以改变会保留住。

"$reduce":function(doc,prev){...}每个文档都会对应一次这个调用。系统会传递两个参数:当前文档和累加器文档。本例中,想让reduce函数比较当前文档的时间和累加器

的时间。如果当前文档的时间更近,则将累加器的日期和价格替换成当前文档的值。每一组都有一个独立的累加器,所以不担心不同的日期使用同一个累加器。

还可以加上condition条件

db.runCommand({"group":{

"ns":...

"key":...

"initial":...

"reduce":...

"condition":{"day":{"$gt":"2010/09/30"}}

}})

4 完成器。用于精简从数据库传到用户的数据,这个步骤非常重要,因为group命令的输出一定要能放在单个数据库响应中。

比如说博客,每篇文章有多个标签。现在要找出每天最热的标签。可以按天分组,为每一个标签计数。

db.posts.group({

"key":{"tags":true},

"initial":{"tags":{}},

"$reduce":function(doc,prev){

for(i in doc.tags){

if(doc.tag[i] in prev.tags){

prev.tags[doc.tags[i]]++;

}else{

prev.tags[doc.tags[i]]=1;

}

}

}})

结果:

           


服务器返回:

{"day":"2010/01/12","tag":"winter"},

{"day":"2010/01/13","tag":"soda"},

{"day":"2010/01/14","tag":"nosql"},

finalize能修改传递的参数也能返回新值.

5 将函数作为键使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值