如何在spring boot中使用mongodb实现group这样的分组统计查询呢?
比如:统计中国每个省的同名人数
,数据内容如下:
{ "country" : "china", "province" : "sh", "userid" : "a" }
{ "country" : "china", "province" : "sh", "userid" : "b" }
{ "country" : "china", "province" : "sh", "userid" : "c" }
{ "country" : "china", "province" : "bj", "userid" : "da" }
{ "country" : "china", "province" : "bj", "userid" : "fa" }
统计结果为:[{"country" : "china", "province" : "sh", "count" : 3 },{"country" : "china", "province" : "bj", "count" : 2 }]
使用aggregate([{ $group: {"_id": { "country" : "$country", "province": "$province" , "uid" : "$userid" } } } , { $group: {"_id": { "country" : "$_id.country", "province": "$_id.province" }, count : { $sum : 1 } } }])
mongdb正确获取到数据,那怎么使用java 在springboot中实现呢?
使用聚合查询aggregation实现。由于mongodb数据库的特点,聚合使用到了
管道
操作。(PS. group 操作不能返回指定字段以外的其他字段)类似的实现如下几步:
管道执行的性质,每一步按顺序执行,第一步操作结果传递给下一步进行才做,所以代码的顺序影响最后的结果,因此要想分组后获取集合其他字段,第一步和最后一步都要指定一下想要返回的字段。