I am trying to group, sum and sort data by date created in the format %m%Y.
The problem I am facing is that aggregation result is sorted by month only without year, so I get something like:
012024, 022024, 032024,042024,052024,062023,072023,082023
This desired order is:
062023,072023,082023,012024, 022024, 032024,042024,052024
Any suggestions will be appreciated
Here is my pipeline:
Aggregation aggregation = Aggregation.newAggregation(
match(Criteria.where(STATUS).nin("NEW",CANCELLED,REJECTED).and(DATE_CREATED).gte(startDate)),
project(sumField)
.andExpression("toDate(" + expression + ")")
.as("formattedDate"),
project(sumField)
.and("formattedDate")
.dateAsFormattedString("%m%Y")
.as(MONTH),
group(MONTH).sum(sumField).as(SUM),
project(SUM).and(MONTH).as(DESCRIPTION),
project(SUM).and(DESCRIPTION).previousOperation(),
sort(Sort.by(Sort.Direction.ASC, DESCRIPTION))
);
AggregationResults<SumModel> results = mongoTemplate
.aggregate(aggregation, collectionName, SumModel.class);
return results.getMappedResults();
The pojo is:
public class SumModel {
private String description;
private float sum;
private float percentage;
}