从文档嵌入式数组Mongodb Java获取字段的键

凯瑟琳娜·皮图克

这是我的MongoDB文档的简化架构:

{
    "_id": 0,
    "config": [{
            "property1": "a",
            "property2": "b",
            "property3": "c",
            "property4": "d"
        },
        {
            "property1": "a",
            "property2": "bb",
            "property3": "cc",
            "property4": "d",
            "ispropert5": true
        },
        {
            "property1": "a",
            "property2": "b",
            "property3": "c",
            "property4": "ddd",
            "ispropert5": false,
            "ispropert6": false
        }
    ],
    "entity": "123asdf",
    "url": "",
    "createdDate": 1
}

作为输出,我需要获取嵌套文档的唯一键的列表:{property1,property2,property3,property4,ispropert5,ispropert6}

我在课堂上尝试这样做,但是当然无法将ArrayList转换为Document:

 Document dbo = col.find().first();
        Set<String> keys = dbo.keySet();
        Iterator iterator = keys.iterator();

        while(iterator.hasNext()) {
            String key = iterator.next().toString();
            if(dbo.get(key) instanceof ArrayList){
                Document dboNested = (Document) dbo.get(key); //java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.bson.Document
                Set<String> keysNested = dboNested.keySet();
                System.out.println("KeyNested: " + keysNested);
            }
        }
阿尔瓦罗·莱莫斯(Alvaro Lemos)

就像您评论过的那样,您无法在代码上将ArrayList转换为Document,因此必须将其转换为如下所示的ArrayList:

 while(iterator.hasNext()) {
    String key = iterator.next().toString();
    Object value = dbo.get(key);
    if (value instanceof ArrayList){
        ArrayList<?> dboArrayNested = (ArrayList<?>) value;
        for (Object dboNestedObj : dboArrayNested) {
            if (dboNestedObj instanceof Document) {
                printKeysNested(Document.class.cast(dboNestedObj));
            }
        }
    // else if extra...
    } else if (value instanceof Document) {
        printKeysNested(Document.class.cast(value));
    }
}

public static void printKeysNested(Document dboNested) {
    Set<String> keysNested = dboNested.keySet();
    System.out.println("KeyNested: " + keysNested);
}

我希望这可以帮助你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mongodb Java 3.4-从嵌入式文档获取字段

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

Mongodb:将字段添加到嵌入式文档中(无数组)

如何在MongoDB中使用数组获取嵌入式文档(使用Mongoose)

使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

MongoDB获取dictfield /嵌入式文档的平均值

使用 Java 管理 MongoDB 嵌入式文档

在MongoDB中搜索嵌入式数组(使用Java)

将嵌入式文档插入到mongodb文档中的新字段

从嵌入式文档中删除字段

按嵌入式文档字段排序

Mongo嵌入式文档字段查询

查找数组中是否存在嵌入式文档,并获取父文档的属性值

MongoDB聚合:通过动态字段路径从嵌入式文档添加字段

在MongoDB中排除嵌入式文档中除单个字段之外的所有字段

从mongodb集合中的嵌入式数组对象仅获取特定字段

mongodb是否会在嵌入式文档的_id字段上自动创建索引?

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

MongoDB-在嵌入式文档中找不到特定字段

使用mongoDB将嵌入式文档与父字段进行比较

Mongodb node.js 查询嵌入式文档具有多个值的单个字段。

使用索引键更新mongo文档中大型嵌入式数组的优化方法

如何在数组中的嵌入式文档中指定/投影字段?

计算嵌入式文档/数组中字段的平均值

MongoDB,如何获取刚在嵌入式文档中创建的ObjectId?

使用C#获取和添加/更新多层嵌入式/嵌套MongoDB文档

如何获取具有嵌入式键值对数组的PyMongo文档的值(实时)

Mongodb更新嵌入式字段