我有一个带有以下正文的文档:
{
pptoGastado: 100,
presupuestos: [
{
importe: 1
}
{
importe: 2
}
],
activo: true
}
{
pptoGastado: 100,
presupuestos: [
{
importe: 1
}
],
activo: false
}
我想从所有文档中获取所有importe
字段的总和减去pptoGastado
的总数,并且仅当activo字段为true时,所以它应该是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
的总和。 / p>