Java Spring Data+Mongo-无组字段的和

Java Spring Data+Mongo-无组字段的和,java,spring,mongodb,mongodb-query,spring-data,Java,Spring,Mongodb,Mongodb Query,Spring Data,我有一个这样的匹配标准- Criteria criteria = new Criteria() .and("paidMobileMetadata").in(metadataList) .and("localDate").gt(startDate).lte(endDate); Aggregation agg = Aggregation.newAggregation( Aggregation.match

我有一个这样的匹配标准-

Criteria criteria = new Criteria()
                .and("paidMobileMetadata").in(metadataList)
                .and("localDate").gt(startDate).lte(endDate);
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group("anyField").sum("money").as("total")
        );
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group(null).sum("money").as("total")
        );
现在我想得到场的和,也就是说,钱属于上面的标准,而不在某个场上分组

早些时候,我也遇到过同样的问题,我必须在某个领域对这个匹配标准进行分组,我是这样做的-

Criteria criteria = new Criteria()
                .and("paidMobileMetadata").in(metadataList)
                .and("localDate").gt(startDate).lte(endDate);
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group("anyField").sum("money").as("total")
        );
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group(null).sum("money").as("total")
        );
但是在这里我不能分组,在mongo中是否有任何方法可以分组所有文档,而没有任何字段

解释: 假设500行/doc属于我的标准,并且都有money字段。我想将所有500个money相加,不分组

当我试着这样做的时候-

Criteria criteria = new Criteria()
                .and("paidMobileMetadata").in(metadataList)
                .and("localDate").gt(startDate).lte(endDate);
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group("anyField").sum("money").as("total")
        );
Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group(null).sum("money").as("total")
        );

给我一个例外,说聚合字段不能为null或空

只需传入而不带参数,因为不提供参数等于null:

Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria()
                    .and("paidMobileMetadata").in(metadataList)
                    .and("localDate").gt(startDate).lte(endDate)),
                Aggregation.group().sum("money").as("total")
        );

您能展示一些示例文档和您的预期输出吗?@chridam已经解释了这个问题。