mongo Aggregation group

按年/月进行统计:

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}}
]);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值