天天看点

mongodb的aggregate学习之1-pipeline

mongodb的aggregate学习之1-pipeline

想知道某个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}]}
      
是想要的结果了