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 聚合查询