mongodb的aggregate学习之1-pipeline

本文通过逐步调整MongoDB聚合管道的查询方式,最终实现了按国家和省份统计唯一userid数量的目标。过程中展示了不同分组方式对统计结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


想知道某个country和province下userid的数量,相同userid算一个

如果这么写,
[
{
		$group:
			{
				"_id": {"country": "$country", "province": "$province"},
				'count': {$sum: 1}
			}
	}
]

返回了
{"result":[{"_id":{"country":"us","province":"shandong"},"count":2},
	{"_id":{"country":"cha","province":"beij"},"count":1},
	{"_id":{"country":"cha","province":"shandong"},"count":3}]
}
从结果来看,计算结果是按照country和province分组了,就是同一个country和province下有几条数据,
不是我们想要的结果,再改
[{
		$group:
			{
				"_id": {"country": "$country", "province": "$province", "uid": "$userid"},
				'count': {$sum: 1}
			}
	}]
返回了
{"result":[{"_id":{"country":"cha","province":"beij","uid":"aaa"},"count":1},
          {"_id":{"country":"us","province":"shandong","uid":"aaa"},"count":2},
          {"_id":{"country":"cha","province":"shandong","uid":"bbb"},"count":2},
          {"_id":{"country":"cha","province":"shandong","uid":"aaa"},"count":1}
]}
再改,
[
	{
		$group:
			{
				"_id": {"country": "$country", "province": "$province", "uid": "$userid"},
				'count': {$sum: 1}
			}
	},
	{
		$group:
			{
				"_id": {"country": "$_id.country", "province": "$_id.province", "uid": "$_id.uid"},
				'count': {$sum: 1}
			}
	}
];
返回了
{"result":[{"_id":{"country":"cha","province":"shandong","uid":"aaa"},"count":1},
         {"_id":{"country":"cha","province":"shandong","uid":"bbb"},"count":1},
         {"_id":{"country":"us","province":"shandong","uid":"aaa"},"count":1},
          {"_id":{"country":"cha","province":"beij","uid":"aaa"},"count":1}
]}
和上一个的结果相比,就是count都变成了1,还不是想要的结果,再改改	
[
	{
		$group:
			{
				"_id": {"country": "$country", "province": "$province", "uid": "$userid"},
				'count': {$sum: 1}
			}
	},
	{
		$group:
			{
				"_id": {"country": "$_id.country", "province": "$_id.province", /*"uid": "$_id.uid"*/},
				'count': {$sum: 1}
			}
	}
];
就是注释了一点点的代码,返回结果
{"result":[{"_id":{"country":"us","province":"shandong"},"count":1},
         {"_id":{"country":"cha","province":"shandong"},"count":2},
          {"_id":{"country":"cha","province":"beij"},"count":1}]}
是想要的结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值