MongoDB Java驱动查询异常:按d>2、a="ABC"、b="AA"筛选无结果求助
解决MongoDB Java查询无结果问题并构建指定条件查询
兄弟,我瞅了你的样本数据和Java代码,一眼就发现问题根源了——你代码里用的查询字段名和MongoDB实际存的字段完全不匹配!样本数据里的字段是a、b、c、d,但你代码里却写了country、ccy、type这些,这肯定查不到数据啊!
下面我给你修正代码,同时实现你需要的d>2, a="ABC", b="AA"这个查询条件:
修正后的查询条件构建方法
首先把字段名对应正确,然后实现指定的过滤逻辑:
import org.apache.commons.lang3.StringUtils; import org.bson.Document; public Document buildCorrectCriteria(String a, String b, Double d) { Document criteria = new Document(); // 匹配a="ABC" if (StringUtils.isNotBlank(a)) { criteria.append("a", a); } // 匹配b="AA" if (StringUtils.isNotBlank(b)) { criteria.append("b", b); } // 匹配d>2 if (d != null) { criteria.append("d", new Document("$gt", d)); } // 如果还有其他需要的字段(比如原来的e、f),可以按同样逻辑添加,注意字段名要和MongoDB一致 return criteria; }
执行查询的代码
调用上面的方法生成条件,然后执行查询:
// 生成指定条件:a="ABC", b="AA", d>2 Document queryCriteria = buildCorrectCriteria("ABC", "AA", 2.0); // 执行查询,限制返回10条数据 Finderable<Document> findDocument = dbName.find(queryCriteria).limit(10); // 遍历结果(如果你需要获取数据的话) for (Document doc : findDocument) { System.out.println(doc.toJson()); }
额外说明
- 如果你原来的方法里还有
e、f这些参数,要注意它们对应的MongoDB字段名是什么,别再像之前那样写错了,比如原来的aNumber、iCode要确认MongoDB里有没有这些字段,或者是不是对应样本里的某个字段。 - 确保你的
StringUtils导入正确(比如用Apache Commons Lang的),如果不想用第三方库,也可以自己写空值判断逻辑。
内容的提问来源于stack exchange,提问作者Shilpa1904
相关产品推荐
相关产品推荐

