У меня есть документ со следующим телом:
{
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
.