我正在尝试为 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);
我做错了什么?
您需要将
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);