Spring Data MongoRepository 按多个字段和投影分组的记录计数

问题描述 投票:0回答:1

我正在尝试为 Spring Boot mongo 存储库接口方法构建聚合管道。需求是对文档的多个字段进行分组,并返回每组的计数。

在简单的SQL查询中,如下所示。

select field1, field2, field3, count(*) as count from document where status = ?

我尝试了下面的聚合管道,计数有效,但字段填充为空。

@Aggregation(
        pipeline = {
            "{$group: { _id: { field1: '$field1', field2: '$field2', field3: '$field3', field4: '$field4', field5: '$field5' } } }",
            "{$project:  {status: ?0}}",
            "{$count :  'count'}"
        })
List<MyAggregate> findAllGroups(String status);

我做错了什么?

spring-boot spring-data-mongodb
1个回答
0
投票

您需要将

count(*)
纳入小组赛阶段。

试试这个:

@Aggregation(
    pipeline = {
        "{$match: {status: ?0}}",
        "{$group: { _id: { field1: '$field1', field2: '$field2', field3: '$field3', field4: '$field4', field5: '$field5' }, count: {$sum:1} } }",
        "{$project:  {_id: -1, field1:'$_id.field1', field2:'$_id.field2',field3:"$_id.field3", field4:"$_id.field4", field5:"$_id.field5"}}"
    })
List<MyAggregate> findAllGroups(String status);
© www.soinside.com 2019 - 2024. All rights reserved.