mongoDB聚合

原创 2015年07月07日 09:36:12

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 将函数作为键使用。

MongoDB的再次相逢之聚合(一)

聚合框架MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*); 在MongoDB中,使用聚合框架可以...
  • tom_code
  • tom_code
  • 2017年03月09日 14:11
  • 769

学习MongoDB 十一: MongoDB聚合(Aggregation Pipeline基础篇上)(三)

db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个节点的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应...
  • congcong68
  • congcong68
  • 2016年06月09日 10:47
  • 11670

mongodb进阶二之mongodb聚合

上篇我们说了mongodb的高级查询:http://blog.csdn.net/stronglyh/article/details/46817789 这篇说说mongodb的聚合 一:mongod...
  • stronglyh
  • stronglyh
  • 2015年07月10日 10:16
  • 2546

学习MongoDB 九: MongoDB聚合(单一用途的聚合方法)(一)

聚合指各种可以处理批量记录并返回计算结果的操作,并MongoDB提供了丰富的聚合操作,MongoDB提供了进行聚合的三种方式:聚集管道(Aggregation),Map-Reduce方法,和单一用途的...
  • congcong68
  • congcong68
  • 2016年05月15日 22:03
  • 1479

mongodb 聚合详解

聚合(aggregate)框架提供一种方法来计算汇总值,虽然映射化简是强大的,但它往往比简单的汇总任务更困难,如字段值总和或平均值。MongoDB的聚合框架实现sum()、avg()、group by...
  • maoyeqiu
  • maoyeqiu
  • 2015年09月12日 14:06
  • 1097

MongoDB高级查询[聚合Group]

转自: http://my.oschina.net/zhzhenqin/blog/99846 Group 为了方便我还是把我的表结构贴上来: 和数据库一...
  • aboycoder
  • aboycoder
  • 2015年09月13日 00:14
  • 1648

MongoDB查询、索引和聚合

初始化mongodb数据库 > use deng switched to db deng > db.createCollection("jingdong") #无参数 {"ok"...
  • djd1234567
  • djd1234567
  • 2015年06月07日 13:53
  • 1609

MongoDB 聚合查询

MongoDB除了基本的查询功能之外,还提供了强大的聚合功能。这里主要介绍count、distinct和group。1. count:    --在空集合中,count返回的数量为0。    > db...
  • lichangzai
  • lichangzai
  • 2016年02月19日 15:39
  • 3234

mongodb聚合利用日期分组。

$dayOfYear: 返回该日期是这一年的第几天。(全年366天) $dayOfMonth: 返回该日期是这一个月的第几天。(1到31) $dayOfWeek: 返回的是这个周的星期几。(1:星期日...
  • u013066244
  • u013066244
  • 2016年12月23日 17:58
  • 3223

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章Mongodb中数据聚合之基本聚合函数count、distinct、group >和Mongodb中数据聚合之MapReduce >中,我们已经对数据聚合提供了两种实现方式,今天,...
  • andamajing
  • andamajing
  • 2016年05月22日 11:05
  • 17535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mongoDB聚合
举报原因:
原因补充:

(最多只允许输入30个字)