Я использую весеннюю загрузку версии 2.1.4.RELEASE и пытаюсь выполнить агрегацию MongoDB с помощью ConditionBuilder в методе sum.Цель объединения - подсчитать количество документов в Монго, которые соответствуют различным наборам критериев.Когда у построителя условий есть критерии только с одним условием, данные извлекаются без каких-либо проблем.Однако, когда я добавляю несколько условий в критерии (связывая их вместе с помощью критериев и метода), ConditionBuilder всегда возвращает true.
Я вытащил критерии и запустил их сам по обычному запросу, идокументы, извлеченные из запроса, соответствуют тому, что я ожидаю, что запрос вернется.Упрощенная версия модели:
@Document(collection = "contracts")
public class Contract {
private Boolean isComplete;
private Date completeDate;
// getters and setters, etc...
}
Мое агрегирование:
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 1);
Date currentMonth = c.getTime();
Aggregation contractAggregation = newAggregation(
Aggregation.match(/*match criteria that looks at unrelated fields*/),
Aggregation.group()
/* other unrelated summations */
.sum(Cond.newBuilder().when(Criteria.where("isComplete").is(true)).then(1).otherwise(0)).as("completedDocuments")
.sum(Cond.newBuilder().when(Criteria.where("completeDate").gte(currentMonth).and("isComplete").is(true).then(1).otherwise(0)).as("completedDocumentsThisMonth")
);
DashboardHeaderDTO contractsData = mongoTemplate.aggregate(contractAggregation, Contract.class, DashboardHeaderDTO.class).getUniqueMappedResult();
С 13 документами в коллекции контрактов, первое проведенное мной суммирование, которое сохраняет вcompleteDocuments хранит правильное значение (в моем случае, 4), в то время как второе суммирование всегда хранит, сколько документов в коллекции.Ожидаемый результат должен быть равен 1, то есть числу документов, которые будут обнаружены, если я использую критерии в обычном запросе mongoTemplate.
Можно ли использовать построитель условий с критериями, которые рассматривают несколько различных полей?Если да, то где я ошибаюсь на этом этапе агрегирования?