mongodb - 使用 Java FindIterable 访问 MongoDB 中的子文档值
问题描述
我正在尝试在子文档中打印出一个键值,但我无法找到正确的格式来执行此操作。
下面的语句打印出文件:
FindIterable<Document> documents = collection.find(query).projection(fields(include("user.ip_address"))).limit(5);
for (Document document : documents) {
System.out.println(document.get("user"));
}
/* Output */
Document{{ip_address=10.0.0.1}}
Document{{ip_address=10.0.0.2}}
Document{{ip_address=10.0.0.3}}
Document{{ip_address=10.0.0.4}}
Document{{ip_address=10.0.0.5}}
我试过了:
System.out.println(document.get("user.ip_address"))
(打印所有空值)
System.out.println(document.getObjectId("user", "ip_address"))
System.out.println(document.getObjectId(new Document("user", "ip_address")))
(打印所有空值)
和其他 IntelliJ 出错的错误。
编辑:
这在下面确实有效,但似乎应该有更整洁的方法来做到这一点,尤其是随着嵌套文档的增加。
Document ip = (Document) document.get("user");
System.out.println(ip.get("ip_address"));
另外,我不知道为什么我需要将它转换为一个 Document 开始时它是一个 Document 。
System.out.println(document.get("user").getClass());
class org.bson.Document
解决方案
推荐阅读
- ios - UIStackViews 之间的自动布局最小间隙
- oracle-apex - 如何将所有交互式网格过滤器 Oracle APEX 重置为页面加载过程
- api - 如何使用 REST API 创建欢乐频道。
- java - 来自 web.xml 的 logback 值
- string - 如何限制firebase中的字符串长度
- postgresql - 将数组中的一个值连接到每个结果行
- excel - 仅当单元格范围中有 1 时才有效的宏
- android - 从 android 应用程序调用 firebase 函数后未定义
- typescript - 你如何创建一个类数组?
- sql - 在 Splunk 中按时间间隔查询整个历史记录