Java 如何使用投影和过滤器在MongoDB中区分查询?
我在mongo中有属性列表,我正在查询一些嵌套字段。这是我的密码Java 如何使用投影和过滤器在MongoDB中区分查询?,java,mongodb,mongodb-query,Java,Mongodb,Mongodb Query,我在mongo中有属性列表,我正在查询一些嵌套字段。这是我的密码 public List<Brand> searchBrands(Request request) { final MongoCollection<Document> collection = mongoDatabase.getCollection("shop"); final Document query = new Document(); final Document projec
public List<Brand> searchBrands(Request request) {
final MongoCollection<Document> collection = mongoDatabase.getCollection("shop");
final Document query = new Document();
final Document projection = new Document();
final List<Brand> brandList = new ArrayList<>();
query.append("_id", request.getId());
query.append("isActive", true);
if (request.Year() != null) {
query.append("attributes.name", "myYear");
query.append("attributes.value", request.getYear());
}
projection.append("brand.code", 1.0);
projection.append("brand.description", 1.0);
projection.append("_id", 0.0);
Block<Document> processBlock = document -> brandList.
add(Brand.builder().code(document.get("brand",Document.class).getString("code"))
.description(document.get("brand",Document.class).getString("description"))
.build());
collection.find(query).projection(projection).forEach(processBlock);
return brandList;}
公共列表搜索品牌(请求){
最终MongoCollection集合=mongoDatabase.getCollection(“商店”);
最终单据查询=新单据();
最终文件投影=新文件();
最终列表brandList=新的ArrayList();
append(“_id”,request.getId());
query.append(“isActive”,true);
if(request.Year()!=null){
query.append(“attributes.name”、“myYear”);
append(“attributes.value”,request.getYear());
}
投影。追加(“品牌代码”,1.0);
投影.附加(“品牌.说明”,1.0);
投影。追加(“_id”,0.0);
Block processBlock=文档->品牌列表。
添加(Brand.builder().code(document.get(“Brand”),document.class.getString(“code”))
.description(document.get(“品牌”,document.class).getString(“说明”))
.build());
collection.find(query).projection(projection.forEach(processBlock);
返回brandList;}
以上代码返回结果正确,72项同品牌代码。但我想根据品牌代码提取不同的代码。我如何才能做到这一点 我不确定您正在使用哪个mongodb客户端库为mongodb创建查询; 我正在共享您可以在mongodb控制台中运行的查询,以获得您想要的结果。我希望您知道如何使用mongodb客户端库创建此查询
db.shop.distinct('brand.code', myQuery)
//Replace myQuery with your query e.g. {isActive: true}
@卢卡斯希望这对你有帮助。如果答案是肯定的,请对答案进行投票,并将其作为答案接受,以便其他人可以从该问题中获得帮助。