mongo Aggregation group

原创 2015年07月09日 16:15:43

按年/月进行统计:

db.node.aggregate([
	{$group:{
		_id: {
		    year : { $year : "$publishedDate" },        
                    month : { $month : "$publishedDate" }
		},
		count: {$sum: 1}}
	},
	{$sort: {"_id": 1}}
]);

得到如下结果:

{
        "result" : [
                {
                        "_id" : {
                                "year" : 2013,
                                "month" : 3
                        },
                        "count" : 1
                },
                {
                        "_id" : {
                                "year" : 2013,
                                "month" : 4
                        },
                        "count" : 14
                }
        ],
        "ok" : 1
}

如果只按年统计,则把条件中的月去掉即可,
db.node.aggregate([
	{$group:{
		_id: {
		    year : { $year : "$publishedDate" }
		},
		count: {$sum: 1}}
	},
	{$sort: {"_id": 1}}
]);

对符合特定条件的结果,进行分组:

db.user.aggregate([
	{ $match : { "createDate" : { $gte : new ISODate("2015-01-01T20:15:31Z") } } },
	{$group:{
		_id: {
			year : { $year : "$createDate" },        
           <span style="white-space:pre">		</span>month : { $month : "$createDate" }
		},
		count: {$sum: 1}}
	},
	{$sort: {"_id": 1}}
]);

即可对2015-01-01之后的用户进行分组统计,结果:
{
        "result" : [
                {
                        "_id" : {
                                "year" : 2015,
                                "month" : 1
                        },
                        "count" : 1
                },
                {
                        "_id" : {
                                "year" : 2015,
                                "month" : 2
                        },
                        "count" : 6
                }
        ],
        "ok" : 1
}


还有,
db.log.aggregate([
	{ $match : { action : "login" } },
	{$group:{
		_id: {
			year : { $year : "$datetime" },        
            <span style="white-space:pre">		</span>month : { $month : "$datetime" }
		},
		count: {$sum: 1}}
	},
	{$sort: {"_id": 1}}
]);


相关文章推荐

Spring Data MongoDB七:进阶Aggregation操作(下)

上一篇已经Aggregation 做了很详细的介绍,这边就不在介绍,Spring Data MongoDB 项目提供与MongoDB文档数据库的集成,Spring Data MongoDB 提供or...

MongoDB中group() mapReduce() aggregate()之比较

对于SQL而言,如果从users表里查询每个team所有成员的number,查询语句如下: SELECT team, no FROM users GROUP BY team ...
  • huntzw
  • huntzw
  • 2013年03月13日 19:26
  • 7712

Java-mongodb-AggregationOutput(分组、统计)

比较常用的有: •$project - 可以重构数据 •$match - 可以实现类似query的功能 •$limit - 限制返回个数 •$skip - 同上 •$unwind - 可以将一...
  • luckycz
  • luckycz
  • 2015年07月17日 11:28
  • 2907

mongodb常用的两种group方法,以及对结果排序

mongodb作为no-sql数据库的典型代表,拥有着存储海量数据的性能,在插入数据和查询数据方便也有着相对于其他关系型数据库明显的优势,最近学习了mongodb,发现mongodb中没有mysql中...

mongodb使用aggregate、group、match实现mysql中的having(count(1)>1)的功能

关系型数据库中分组去重一般都是group by … having(count(1)>1)…赛选出来重复的记录组,然后一条sql搞定,但是在mongodb里面,没有这么方便了,需要自己写脚本来实现,可...
  • mchdba
  • mchdba
  • 2016年01月04日 16:27
  • 5023

New Aggregation Group(新聚合组)

本文根据Apache Kylin官方文档翻译 详见http://kylin.apache.org/blog/2016/02/18/new-aggregation-group/ 新聚合组(New Ag...

java对mongo的一些去重、分组聚合、分页查询等操作

为java mongo的一些去重、分组聚合、分页优化操作

New Aggregation Group(新聚合组)

本文根据Apache Kylin官方文档翻译 详见http://kylin.apache.org/blog/2016/02/18/new-aggregation-group/ 新聚合组(New Ag...

cannot be cast to java.lang.Comparable解决办法

对于TreeMap,他是一个有序的map,当你将key put到treeMap中,它会根据你所提供的排序规则进行排序插入,如果没有提供,则使用默认。         cannot be cast t...
  • chenssy
  • chenssy
  • 2013年05月16日 15:29
  • 8669

Mongo入门:数据去重之MapReduce,Aggregation的简单使用(另附相关网络资源)

先附上两个很好用也常见的链接: - MongoDB 教程-RUNOOB - The MongoDB 3.4 Manual - 用通俗易懂的大白话讲解Map/Reduce原理(很通俗但是也很浅)。...
  • V_code
  • V_code
  • 2017年01月05日 15:30
  • 1873
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mongo Aggregation group
举报原因:
原因补充:

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