sql >> データベース >  >> NoSQL >> MongoDB

SpringDataMongoDBの集計合計

    私はついにこれを理解しました。重要なのは、MongoDBのSpring Dataでcount()集計関数を使用することです。これは、ネイティブのMongoシェルでは1ずつ増加する合計に変換されます。これが私の最後のJUnitテストです:

        /**
         * 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;
        }
    

    したがって、最終的に、これは次のネイティブ集計操作に変換されます。

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



    1. mongodbで設定解除した後に値nullでファイルされた配列を削除する方法

    2. C#でMongoDump/MongoRestoreを実行します

    3. MongoDBでインデックスが非表示になっているかどうかを確認する方法

    4. Mac OS 10.15(Catalina)にアップグレードした後、MongoDBがデータディレクトリを見つけることができません