Шаблон Spring Spring возвращает неправильные результаты - PullRequest
0 голосов
/ 07 июня 2019

У меня есть документ со следующим телом:

{
   pptoGastado: 100,
   presupuestos: [
             {
                importe: 1
             }
             {
                importe: 2
             }
     ],
    activo: true
}
{
   pptoGastado: 100,
   presupuestos: [
             {
                importe: 1
             }
     ],
    activo: false
}

И я хочу получить сумму всех полей importe из всех документов минус сумма pptoGastado и только если поле ActivoЭто правда, поэтому должно быть 200 - 3, но с моей агрегацией я получаю 200 - 4. По какой-то причине он также принимает документ с полем activo в false.

Это мой код:

MatchOperation filter = match(Criteria.where("activo")
                .is(true)
                .and("pptoGastado")
                .exists(true)
                .and("presupuestos")
                .not().size(0)
                .and("pmv.fechaInicio")
                .gte(from)
                .lte(to));
        GroupOperation totalAggregation = group()
                .sum("pptoGastado")
                .as("gastado")
                .sum("presupuestos.importe")
                .as("total");
        UnwindOperation unwind = unwind("$presupuestos");
        Aggregation aggregation = newAggregation(filter, unwind, totalAggregation);
        AggregationResults<Document> results = mongoTemplate
                .aggregate(aggregation,"Iniciativas", Document.class);
        System.out.println(results.getMappedResults().get(0));

У меня также есть pmv.fechaInicio для фильтрации по дате, но это не имеет значения.

Спасибо.

РЕДАКТИРОВАТЬ 1

Я обнаружил, что операция unwind вызывает это, если я удаляю его, я правильно получаю поле pptoGastado, но не получаю сумму каждого presupuestos.importe.

...