【问题标题】:How to read array from mongoDB document in java?java - 如何从java中的mongoDB文档中读取数组?
【发布时间】:2017-08-15 20:50:06
【问题描述】:

当我尝试从 mongoDB 文档中放入这个 type1 数组时,我可以通过 java 将它作为一个数组,方法是:

BasicDBList listEditionsAssets = (BasicDBList) nextAssets.get("areas");

下面是type1数组:

{
 "ClientId" : "212",
 "UserId" :"212",
 "areas" : [
   {
     "Area 1" : "Chicago"
     "Area 2" : "LA",
     "Area 3" : "Boston" 
  ]
}

但是,以下是我在 mongoDB 文档中的数据:

下面是'type2'数组:

{
 "ClientId" : "212",
 "UserId" :"212",
 "areas" : ["Chicago","LA","Boston" ]
} 

当我尝试使用 BasicDBList 在 java 中检索“areas”数组时,它显示为“null”。因为java把它当作字符串。当我把它当作

BasicDBObject result = (BasicDBObject) it.next();
String areas = (String) result.get("areas");

我可以读的是字符串。

那么如何将 type2 文档中的“区域”读取为 java 中的数组而不是字符串?

【问题讨论】:

  • 你确定type2.areas 是一个数组吗?我已经用mongo-java-driver 3.4.2 在我的本地进行了测试。它确实返回一个带有(List) dbObject.get("areas") 的列表
  • 我的对象 -> { "areas" : ["1", "2"] } 和上面的结果通过列表转换得到 -> ["1", "2"]
  • 嗨,我将 List 设为“null”。我试图将它作为字符串并显示结果.. BasicDBObject result = (BasicDBObject) it.next();字符串区域 = (result.getString("areas")); System.out.println(areas);无法猜测为什么要让 List 为空...你能建议有什么想法吗?

标签: java arrays string mongodb arraylist


【解决方案1】:

读取数组和读取文档的唯一显着区别在于,由于数组的元素没有名称,因此没有要读取的字段名称,只有一系列值:

reader.readStartArray();

while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
    switch (reader.getCurrentBsonType()) {
        case INT32:
            int intValue = reader.readInt32();
            break;
        case INT64:
            long longValue = reader.readInt64();
            break;
        // ... handle each supported field type
    }
}

reader.readEndArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多