Spring Mongo模板聚集返回错误结果

时间:2019-06-07 07:52:59

标签: spring mongodb spring-boot aggregation-framework

我有一个带有以下正文的文档:

{
   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>

0 个答案:

没有答案