MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сума на агрегиране в Spring Data MongoDB

Разбрах това най-накрая. Ключът е да се използва функцията за агрегиране count() в Spring Data за MongoDB, което се превежда като нарастване на сумата с 1 в естествената обвивка на Mongo. Това е последният ми 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Поддокумент за намиране/актуализиране на Mongoose

  2. Как да използвате променливи във функцията за намаляване на картата на MongoDB

  3. Може ли Meteor правилно да обработва данни, актуализирани външно директно към базата данни MongoDB?

  4. Пролетни данни:Уникално поле в MongoDB документ

  5. Как да активирам профилиране в node-mongodb-native?