【问题标题】:Spring Data + Mongo- sum of field without groupSpring Data + Mongo- 无组字段的总和
【发布时间】:2016-11-27 23:41:18
【问题描述】:

我有这样的匹配标准-

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")
        );

但是这里我不能分组,mongo中有没有什么方法可以对所有文档进行分组,没有任何字段。

Explaination: 假设 500 行/文档属于我的标准,并且都有钱字段。我想总结所有 500 钱,不分组。

当我这样尝试时-

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")
        );

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

【问题讨论】:

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

标签: java spring mongodb mongodb-query spring-data


【解决方案1】:

不带参数直接传入,因为不提供等于 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")
        );

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 2013-05-20
    • 2016-09-01
    • 2018-06-16
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多