MongoDB進階查詢[彙總Group]

來源:互聯網
上載者:User

接上一篇... 見: 

  • Group

為了方便我還是把我的表結構貼上來:

和資料庫一樣group常常用於統計。MongoDB的group還有很多限制,如:返回結果集不能超過16M, group操作不會處理超過10000個唯一鍵,好像還不能利用索引[不很確定]。

 

Group大約需要一下幾個參數。

  1. key:用來分組文檔的欄位。和keyf兩者必須有一個
  2. keyf:可以接受一個javascript函數。用來動態確定分組文檔的欄位。和key兩者必須有一個
  3. initial:reduce中使用變數的初始化
  4. reduce:執行的reduce函數。函數需要傳回值。
  5. cond:執行過濾的條件。
  6. finallize:在reduce執行完成,結果集返回之前對結果集最終執行的函數。可選的

下面我用Java對他們做一些測試。

我們以age年齡統計集合中存在的使用者。Spring Schema和上次的一樣。有了MongoTemplate對象我們可以做所有事的。以age統計使用者測試代碼如:

@Test
    public void testGroupBy() throws Exception {
        String reduce = "function(doc, aggr){" +
                "            aggr.count += 1;" +
                "        }";
        Query query = Query.query(Criteria.where("age").exists(true));
        DBObject result = mongoTemplate.getCollection("person").group(new BasicDBObject("age", 1),
                query.getQueryObject(),
                new BasicDBObject("count", 0),
                reduce);
       
        Map map = result.toMap();
        System.out.println(map);
        for (Map.Entry o : map.entrySet()) {
            System.out.println(o.getKey() + "  " + o.getValue());
        }
    }

key為new BasicDBObject("age", 1)

cond為:Criteria.where("age").exists(true)。即使用者中存在age欄位的。

initial為:new BasicDBObject("count", 0),即初始化reduce中人的個數為count為0。假如我們想在查詢的時候給每個年齡的人增加10個假使用者。我們只需要傳入BasicDBObject("count", 10).

reduce為:reduce的javascript函數

上面的執行輸出如:

2  [age:23.0, count:1.0]
1  [age:25.0, count:1.0]
0  [age:24.0, count:1.0]

前面的是一個序號,是Mongo的java-driver加上去的。我們可以看到結果在後面。

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.