#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 я обновил свой код.