将聚合查询结果映射到正确的 POJO 属性

Map aggregate query result to correct attributes of POJO

我有一个名为 Location 的集合,它有几个我只想获取国家代码和国家名称的属性。

当我在 Spring 数据中使用以下聚合查询时,所有属性都映射到 Location.java 的 _id 属性,而不是列表的单个 countryCode 和 countryName 属性。请帮我解决同样的问题。

@Repository
public class AggregateQueryRepository {
    
@Autowired
ReactiveMongoTemplate reactiveMongoTemplate;
 
public Flux<Location> getAllCountryCodeAndCountry() {
        Aggregation aggregation = newAggregation(group("countryCode", "countryName")
        );
        return reactiveMongoTemplate.aggregate(aggregation, "location", Location.class);
    }
}

目前结果的每个对象如下所示:

{ "_id": "{\"countryCode\": \"IN\", \"countryName\": \"India\"}" }

我想将其映射到如下所示:

{
{ "_id": null,
"countryCode": "ÏN"
"countryName": "India"
},
....
.....
}

如果一定要单独拥有,可以考虑使用$first aggregation accumulator:

Aggregation aggregation = newAggregation(
    group("countryCode", "countryName")
        .first("countryCode").as("countryCode")
        .first("countryName").as("countryName")
);

return reactiveMongoTemplate.aggregate(aggregation, "location", Location.class);

...或者 $replaceRoot aggregation stage:

Aggregation aggregation = newAggregation(
    group("countryCode", "countryName"),
    replaceRoot("_id")
);

return reactiveMongoTemplate.aggregate(aggregation, "location", Location.class);