Java获取MongoDB文档中RelatedDomains的DomainName方法咨询
看起来你已经摸到了门道,不过代码里有个小问题需要调整——RelatedDomains是数组类型,你既把它转成BasicDBList又转成DBObject,这会导致逻辑错误。咱们直接把它当作列表遍历,逐个提取DomainName就好。
这里是修正后的完整代码:
while (cursor.hasNext()) { BasicDBObject dom = (BasicDBObject) cursor.next(); // 获取RelatedDomains数组,先做非空判断避免空指针 BasicDBList relatedDomains = (BasicDBList) dom.get("RelatedDomains"); List<String> domainNames = new ArrayList<>(); if (relatedDomains != null && !relatedDomains.isEmpty()) { // 遍历数组里的每个Domain对象 for (Object item : relatedDomains) { BasicDBObject domainObj = (BasicDBObject) item; // 直接提取DomainName字段 String domainName = domainObj.getString("DomainName"); // 额外判断字段值非空,避免无效数据 if (domainName != null) { domainNames.add(domainName); } } } // 这里可以对domainNames做后续处理,比如打印或存储 System.out.println("提取到的DomainName列表:" + domainNames); }
关键说明:
- 先判断
relatedDomains是否为null或空数组,防止运行时抛出空指针异常 - 数组里的每个元素都是
BasicDBObject类型,对应文档中{ "DomainName" : "Energie", "Confidence" : 1 }这样的子文档 - 使用
getString("DomainName")可以直接提取字符串类型的字段值,比get()再强转更简洁 - 增加字段值非空判断,避免把null值加入结果列表
这样处理后,你就能得到仅包含DomainName的列表了。
内容的提问来源于stack exchange,提问作者sp0030
相关产品推荐
相关产品推荐

