MongoDB中的分组聚合在java中的用法

现在有张表,搜索的历史记录,需要统计每个字出现次数,如果数据库是关系型的话,很好解决group by count order一下子就能搞定,现在是Mongo很多事情变得麻烦起来了.....

首先看mongo中分组的用法:

db.appUser.aggregate([{"$group":{_id:"$userid",count:{$sum:1}}},{$sort:{count:-1}}]) 

知道了这个用法,再怎么用Java写出来了呢?

我找啊找,找啊找,找啊找。。。。。。。。。。。

 

终于在spring的官网上找到答案了:

http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/

ps:打开网页,页面很长,然后Ctrl+F查找Aggregation

如果是截取再分组:

> db.user_start_app.aggregate([{"$group":{_id:{"$substr" : ["$citycode",0 ,4]},count:{$sum:1}}},{$sort:{count:-1}}])
{ "_id" : "4403", "count" : 9 }
{ "_id" : "6103", "count" : 6 }
{ "_id" : "0755", "count" : 3 }
{ "_id" : "4212", "count" : 1 }
> 

一 :简单的分组查询--使用Mongo本身提供的AggregationOutput进行分组查询

  //此查询语句== select eval as eval, count(*) as docsNum from news group by eval having docsNum>=85 order by docsNum desc
        //具体的mongodb和sql的对照可以参考:http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/
        String groupStr = "{$group:{_id:{'eval':'$eval'},docsNum:{$sum:1}}}";
        DBObject group = (DBObject) JSON.parse(groupStr);
        String matchStr = "{$match:{docsNum:{$gte:85}}}";
        DBObject match = (DBObject) JSON.parse(matchStr);
        String sortStr = "{$sort:{_id.docsNum:-1}}";
        DBObject sort = (DBObject) JSON.parse(sortStr);
        AggregationOutput output = mongoTemplate.getCollection("news").aggregate(group, match, sort);
        System.out.println(output.getCommand());

二:获取和testGroup1方法同样结果的另一种写法,Spring Data MongoDB隆重登场,语法更加简洁易懂

 TypedAggregation<News> agg = Aggregation.newAggregation(
                News.class,
                project("evaluate")
                ,group("evaluate").count().as("totalNum")
                ,match(Criteria.where("totalNum").gte(85))
                ,sort(Sort.Direction.DESC, "totalNum")
            );

            AggregationResults<BasicDBObject> result = mongoTemplate.aggregate(agg, BasicDBObject.class);
            System.out.println(agg.toString());

 

mongodb官网:

http://docs.mongodb.org/manual/applications/aggregation/

spring-data-mongodb:http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/htmlsingle/#mongo.aggregation

参考博客:MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

参考博客:https://my.oschina.net/GivingOnenessDestiny/blog/88006

转载于:https://my.oschina.net/u/1266221/blog/843891

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值