MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Suma agregacji w Spring Data MongoDB

W końcu to rozgryzłem. Kluczem jest użycie funkcji agregacji count() w Spring Data dla MongoDB, co przekłada się na sumę przyrostów o 1 w natywnej powłoce Mongo. To jest mój ostatni test 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;
    }

Ostatecznie przekłada się to na następującą natywną operację agregacji:

{
   "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. bson.D vs bson.M dla zapytań typu find

  2. MongoDB jsonSchema walidacja extraProperties

  3. Wyjaśnij, że mam pięć lat:Formularz z polem tekstowym i obrazowym> Trasy> Kontroler> Zapis do dokumentu MongoDB - Gdzie jest GridFS?

  4. Meteor:nieoczekiwany kod wyjścia mongo 100

  5. Połącz się z bazą danych MongoDB Atlas Cluster z natywną aplikacją React