Данные Spring mongodb собирают различные подколлекции - Performance Tuning - PullRequest
1 голос
/ 26 марта 2019
[
   {
      "categories":{
         "category":[
            "sub1",
            "sub2",
            "sub3"
         ],
         "category2":[
            "sub1",
            "sub2"
         ]
      }
   },
   {
      "categories":{
         "category":[
            "sub1",
            "sub4"
         ],
         "category2":[
            "sub5",
            "sub4"
         ]
      }
   }
]

хочет получить отдельную категорию и категорию2, используя данные Spring. Я пробовал и Aggregation, и Distinct, и медленно, и я надеюсь, что мне чего-то не хватает

Агрегация:

AggregationResults<Category> results = mongoTemplate.aggregate(Aggregation.newAggregation(Aggregation.group(categoryFields.stream().toArray(String[]::new))),"recipe",Category.class );

Distinct:

 categoryFields.stream().forEach(cat -> {
            categories.put(cat, mongoTemplate.findDistinct(query, "categories." + cat, "recipe", Recipe.class, Category.class));
        });

Агрегация занимает 11 секунд, а различная - 3 секунды.

...