MongoDB 从嵌套文档中读取

Nat*_*ish 2 java mongodb mongodb-java

我有一个包含嵌套文档的文档,我认为根据过滤器,我可以指定诸如 data.sms.mobileNumber 之类的内容。然而这行不通。

我将如何使用标准 Document getString 请求读取 data.sms.mobileNumber 字段中的数据?

示例文档:

{ "_id" : ObjectId("59b850bd81bacd0013d15085"), "data" : { "sms" : { "message" : "Your SMS Code is ABCDEFG", "mobileNumber" : "+447833477560" } }, "id" : "b0a3886d69fc7319dbb4f4cc21a6039b422810cd875956bfd681095aa65f6245" }
Run Code Online (Sandbox Code Playgroud)

示例字段获取字符串请求:

document.getString("data.sms.message")
Run Code Online (Sandbox Code Playgroud)

gly*_*ing 5

“路径”data.sms.message指的是这样的结构:

+- data
  |
  +- sms
    |
    +- message
Run Code Online (Sandbox Code Playgroud)

要使用 Java 驱动程序阅读它data,您必须阅读文档,然后是sms子文档,然后是该子文档的message属性。

例如:

Document data = collection.find(filter).first();
Document sms = (Document) data.get("sms");
String message = sms.getString("message");
Run Code Online (Sandbox Code Playgroud)

或者,与快捷方式相同的事情:

String message = collection.find(filter).first()
    .get("sms", Document.class)
    .getString("message");
Run Code Online (Sandbox Code Playgroud)

更新 1回答这个问题:“我有一个案例,我在一个文档中有一个文档数组,我将如何从数组中的文档中获取一个字段?” 假设您有一个包含名为数组字段的文档,details并且每个文档detail都有nameage。像这样的东西:

{"employee_id": "1", "details": [{"name":"A","age":"18"}]}
{"employee_id": "2", "details": [{"name":"B","age":"21"}]}
Run Code Online (Sandbox Code Playgroud)

您可以像这样读取数组元素:

    Document firstElementInArray = collection.find(filter).first()
        // read the details as an Array 
        .get("details", ArrayList.class)
        // focus on the first element in the details array
        .get(0);

    String name = firstElementInArray.getString("name");
Run Code Online (Sandbox Code Playgroud)