mongodb命令列group分組和java代碼中group分組

來源:互聯網
上載者:User

標籤:

group分組統計是資料庫比較常用的功能,mongodb也不例外。不過相對於普通的增刪改查,group操作就略微麻煩一些,這裡對group在shell中的操作、使用java原生代碼操作以及整合spring進行操作進行一個簡單的歸納總結,分組的途徑和方法應該都有多種,這裡每一樣只舉一例。
本例中資料來源如下:

需要使用group實現的目的是:按年齡分組統計出每一組的數量。
1、mongo shell中執行如下命令:
db.test.group({    key:{"age":1},    initial:{"count":0},   $reduce:function(doc,out){ out.count++; } ,   $finalize:function(out){ return out; } } )

執行代碼及結果

2、java原生代碼進行上述操作:
public class MonTest {    public static void main(String[] args) {        monGroup();    }    public static void monGroup() {        ServerAddress sa = new ServerAddress("192.168.0.201", 37017);        List<MongoCredential> mongoCredentialList = new ArrayList<MongoCredential>();        mongoCredentialList.add(MongoCredential.createMongoCRCredential("admin", "admin", "123456".toCharArray()));        Mongo client = new MongoClient(sa, mongoCredentialList);        DB database = client.getDB("admin");        DBCollection coll = database.getCollection("test");        DBObject keys = new BasicDBObject("age", 1);        DBObject condition = null;        DBObject initial = new BasicDBObject("count", 0);        String reduce = "function(doc,out){out.count++;}";        String finalize = "function(out){return out;}";        BasicDBList dbList = (BasicDBList) coll.group(keys, condition, initial, reduce, finalize);        if (dbList != null) {            for (int i = 0; i < dbList.size(); i++) {                DBObject obj = (DBObject) dbList.get(i);                Object age = obj.get("age");                Object count = obj.get("count");                System.out.println("age:" + age + ",count:" + count);            }        }    }}

執行結果

3、整合spring後的操作:
環境搭建可參考:http://blog.csdn.net/tuzongxun/article/details/51404529
dao方法實現代碼:
  /**     * mongodb簡單分組查詢     *      * @author:tuzongxun     * @Title: mongoGroup     * @param @return     * @date Jul 19, 2016 8:36:19 AM     * @throws     */    @Override    public BasicDBList mongoGroup() {        // TODO Auto-generated method stub        GroupBy groupBy = GroupBy.key("age").initialDocument("{count:0}").reduceFunction("function(doc, out){out.count++}")            .finalizeFunction("function(out){return out;}");        GroupByResults<UserModel> res = mongoTemplate.group("test", groupBy, UserModel.class);        DBObject obj = res.getRawResults();        BasicDBList dbList = (BasicDBList) obj.get("retval");        return dbList;    }


對應的實體model:
package spring_mongo.models;import java.io.Serializable;public class UserModel implements Serializable {    private static final long serialVersionUID = 1L;    private String name;    private int age;    public UserModel(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "UserModel [name=" + name + ", age=" + age + "]";    }}

junit測試方法:
@Test    public void mongoGroup() {        BasicDBList dbList = userDao.mongoGroup();        if (dbList != null) {            for (int i = 0; i < dbList.size(); i++) {                DBObject obj = (DBObject) dbList.get(i);                Object age = obj.get("age");                Object count = obj.get("count");                System.out.println("age:" + age + ",count:" + count);            }        }    }

運行結果




mongodb命令列group分組和java代碼中group分組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.