MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tổng hợp trong Spring Data MongoDB

Tôi đã tìm ra điều này cuối cùng. Chìa khóa là sử dụng hàm tổng hợp count () trong Dữ liệu mùa xuân cho MongoDB, hàm này có nghĩa là tính tổng các gia số bằng 1 trong trình bao Mongo gốc. Đây là bài kiểm tra JUnit cuối cùng của tôi:

    /**
     * Test page posts count
     */
    @Test
    public void testPagePostsCount() throws Exception{
        MongoTemplate template = repository.getMongoTemplate();
        Page page = new Page();
        page.setPageId("2210");
        page.setUserId("azec");
        List<String> postList = new ArrayList<String>();
        postList.add("53eb1a560efbe048c7ea698d");
        postList.add("53eb1a6b0efbe048c7ea698e");
        page.setPostIds(postList);
        template.save(page);

        Aggregation agg = newAggregation(
            match(Criteria.where("_id").is("2210")),
            unwind("postIds"),
            group("_id").count().as("nPosts"),
            project("nPosts").and("_id").as("pageId")
        );

        AggregationResults<PostCount> results = template.aggregate(agg, "page", PostCount.class);
        List<PostCount> postCount = results.getMappedResults();
        Assert.assertTrue(!postCount.isEmpty());
        Assert.assertTrue(postCount.get(0).nPosts == 2);
        Assert.assertTrue(postCount.get(0).pageId.equals("2210"));
    }

    private class PostCount {
        String pageId;
        int nPosts;
    }

Vì vậy, cuối cùng điều này chuyển thành hoạt động tổng hợp gốc sau:

{
   "aggregate":"page",
   "pipeline":[
      {
         "$match":{
            "_id":"2210"
         }
      },
      {
         "$unwind":"$postIds"
      },
      {
         "$group":{
            "_id":"$_id",
            "nPosts":{
               "$sum":1
            }
         }
      },
      {
         "$project":{
            "nPosts":1,
            "pageId":"$_id"
         }
      }
   ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy xuất dữ liệu từ bộ sưu tập MongoDB vào Swing JTable

  2. Kết hợp đối sánh trên trường văn bản với tổng hợp

  3. MongoDB $ stdDevPop

  4. Sửa đổi gián tiếp thuộc tính quá tải App \ Dossier ::$ program không có hiệu lực

  5. Lỗi lặp lại:Yêu cầu ủy quyền