Конструктор условий агрегации всегда возвращает true при использовании нескольких критериев - PullRequest
0 голосов
/ 18 июня 2019

Я использую весеннюю загрузку версии 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.

Можно ли использовать построитель условий с критериями, которые рассматривают несколько различных полей?Если да, то где я ошибаюсь на этом этапе агрегирования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...