mongodb的aggregate学习之1-pipeline

来源:互联网 发布:unix 网络数据库 编辑:程序博客网 时间:2024/05/18 02:18


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

原创粉丝点击