Как подсчитать по кварталам с помощью агрегирования

#java #mongodb #spring-boot #aggregation

#java #mongodb #весенняя загрузка #агрегация

Вопрос:

Я использую MongoDB. Я упорядочил коллекцию элементов, в которой каждый упорядоченный элемент был сохранен по дате (дата iso). Теперь я хочу получить подсчет всех элементов по кварталам.

например, когда я передам: -http:// localhost:8080/demo?quarter = Q1 Тогда он вернет общее количество за первые четыре месяца (т.Е. За первый квартал)

Как я могу обнаружить квартал за 4 месяца.Я хочу использовать для этого агрегацию. Как я могу реализовать это с помощью агрегации в spring boot.

Мой код агрегации:

 @Override
public List<Order> demoByQuarter(String quarter) {
   MatchOperation matchOperation1 = 
   Aggregation.match(Criteria.where("months").lte(3));
        MatchOperation matchOperation2 = Aggregation.match(Criteria.where("months").gte(3));

        ConditionalOperators.Cond cond = ConditionalOperators.when(String.valueOf("Q1".equals(quarter)))
                .thenValueOf(String.valueOf(matchOperation1))
                .otherwiseValueOf(String.valueOf(matchOperation2));

        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(where("date").ne(null)),
                Aggregation.project().and(month("$date")).as("months").and(cond).as("month"),
                Aggregation.group("month").count().as("count"),
                project("count").and("month").previousOperation());

        List<Demo> demo=  mongoTemplate.aggregate(aggregation, "user",Demo.class).getMappedResults();
        System.out.println(orders.size());
        return demo;
}
 

когда я запускаю этот код, я получаю данные следующим образом:

 [
    {
        "id": null,
        "userId": null,
        "email": null,
        "productName": null,
        "date": null,
        "count": "9",
        "productId": null,
        "month": null,
        "year": null,
        "quantity": null,
        "quarter": null
    }
]
 

он возвращает общее количество подсчетов за весь месяц, которые доступны в базе данных yo.
в то время как мои фактические данные, которые я хочу :

 [
    {
      
        "quarter": [
        "id": "in string",
        "userId": "userId",
        "email": "user@gmail.com",
        "productName": ["p1","p2"],
        "count": "",// here it returns only count of first 4 month for Q1 quarter
        "productId": "productId",
        "quarter":"Q1"
    }
]
 

Комментарии:

1. Привет и добро пожаловать! Пожалуйста, покажите свой исходный код и опишите, каких результатов вы ожидаете и с какой проблемой вы столкнулись.

2. @Spyros K я обновил свой код.