MongoDB中的分组聚合在java中的用法
2017-02-22 00:00
316 查看
现在有张表,搜索的历史记录,需要统计每个字出现次数,如果数据库是关系型的话,很好解决group by count order一下子就能搞定,现在是Mongo很多事情变得麻烦起来了.....
首先看mongo中分组的用法:
知道了这个用法,再怎么用Java写出来了呢?
我找啊找,找啊找,找啊找。。。。。。。。。。。
终于在spring的官网上找到答案了:
http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/
ps:打开网页,页面很长,然后Ctrl+F查找Aggregation
如果是截取再分组:
一 :简单的分组查询--使用Mongo本身提供的AggregationOutput进行分组查询
二:获取和testGroup1方法同样结果的另一种写法,Spring Data MongoDB隆重登场,语法更加简洁易懂
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
首先看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
相关文章推荐
- [置顶] MongoDB中的分组聚合在java中的用法
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- Java操作MongoDB2.6的常见API用法
- mongodb-java-driver基本用法
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- MongoDB在Java当中的稍复杂用法(内嵌Document或者Array的CRUD)
- mongodb-java-driver基本用法
- JAVA正则表达式高级用法(分组与捕获)
- java操作mongodb(聚合函数)-分组找出每组的最大值
- java:Mongodb 分组统计应用group的使用(含场景)
- Java实现MongoDB的日期(Date)分组功能
- Java实现MongoDB的日期(Date)分组功能
- Java操作mongoDB2.6的常见API用法
- JAVA正则表达式高级用法(分组与捕获)
- mongodb java driver 聚合框架
- Java MongoDB 条件查询及其分组查询
- MongoDB--MapReduce分组去重用法
- Mongodb新增的聚合方法及其Java客户端