天天看點

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}]}
      
是想要的結果了