Spring Mongo 聚合查询以从 MongoDB 获取不同的国家名称和国家代码

Posted

技术标签:

【中文标题】Spring Mongo 聚合查询以从 MongoDB 获取不同的国家名称和国家代码【英文标题】:Spring Mongo Aggregate query to fetch distinct country name and country code from MongoDB 【发布时间】:2021-12-10 14:48:39 【问题描述】:

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

以下查询在 Mongo DB 中运行良好。

db.location.aggregate(["$group": "_id":  countryCode: "$countryCode", countryName: "$countryName" ]);

我想将相同的查询转换为 SpringMongoReactiveAggregate 查询。下面的代码有一些问题。请帮我画出正确的代码。

@Repository
public class AggregateQueryRepository 
    
    @Autowired
    ReactiveMongoTemplate reactiveMongoTemplate;
    
    public Flux<Location> getAllCountryCodeAndCountry(String countryCode, String countryName) 
        Aggregation aggregation = newAggregation(
                match(Criteria.where("_id").is(countryCode).and(countryName)),
                group("_id").push("location").as("location")
        );
        Flux<Location> output
                = reactiveMongoTemplate.aggregate(aggregation, "location", Location.class);
        return output;
    

【问题讨论】:

【参考方案1】:

您不需要match 阶段,您应该将字段名称作为参数传递给group

    public Flux<Location> getAllCountryCodeAndCountry() 
        Aggregation aggregation = newAggregation(
                group("countryCode", "countryName")
        );
        return reactiveMongoTemplate.aggregate(aggregation, "location", Location.class);
    

【讨论】:

谢谢,解决方案有效。我想进一步了解如何将查询结果映射到我的 Location 对象的适当字段。目前我从查询中得到的响应如下 "_id": "\"countryCode\": \"IN\", \"countryName\": \"India\"" 我的 Location 对象有 _id, countryCode和 countryName 属性,但此查询响应已将所有内容映射到 _id 字段,但我想将 countryCode 映射到我的 Location 对象 countryCode 并将 countryName 映射到我的 Location 对象 countryName。如果你能帮我做同样的事情。

以上是关于Spring Mongo 聚合查询以从 MongoDB 获取不同的国家名称和国家代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询

将Mongo查询转换为spring Mongooperations

为啥我的聚合返回重复数据?

Spring Boot Mongo DB 查找聚合操作

运行查询时,mongo上的聚合函数运行速度非常慢

将 SQL 查询转换为 Mongo 聚合