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

如今有張表,搜索的歷史記錄,須要統計每一個字出現次數,若是數據庫是關係型的話,很好解決group by count order一會兒就能搞定,如今是Mongo不少事情變得麻煩起來了.....html

首先看mongo中分組的用法:java

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

知道了這個用法,再怎麼用Java寫出來了呢?mysql

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

 

終於在spring的官網上找到答案了:sql

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

ps:打開網頁,頁面很長,而後Ctrl+F查找Aggregation數據庫

若是是截取再分組:app

> 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隆重登場,語法更加簡潔易懂lua

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

相關文章
相關標籤/搜索