首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用subDocumet访问subDocument的DBObject

如何使用subDocumet访问subDocument的DBObject
EN

Stack Overflow用户
提问于 2013-09-12 05:32:41
回答 1查看 1.6K关注 0票数 1

我需要从下面的json获得所有名称字段的列表。我试图通过映射一个DBObject来实现这一点。

杰森:

代码语言:javascript
复制
{
    "firstOne": [
        {
            "file": "FileA",
            "Data": "One",
            "version": "0.4"
        }
    ],
    "secondOne": [
        {
            "elementName": "version",
            "complexElement": "true",
            "elementDataType": ""
        }
    ],
    "ThirdOne": [
        {
            "elementName": "version",
            "explicitElements": [
                {
                    "name": "mytag",
                    "type": "String",
                    "value": "myrequest"
                },
                {
                    "name": "booleantest",
                    "type": "Boolean",
                    "value": "true"
                }
            ]
        }
    ] }

代码:

DBCollection collection = mongoTemplate.getCollection("testTag"); Map map =新HashMap();DBObject obj =null;BasicDBObject查询=新BasicDBObject();query.put("ThirdOne.explicitElements.name","myTag");BasicDBObject字段=新BasicDBObject();fields.put("ThirdOne.explicitElements.name",1);fields.put("ThirdOne.explicitElements.value",1);DBCursor cursor2 =DBCursor(查询,字段);while (cursor2.hasNext()) { obj = cursor2.next();map = obj.toMap(); 对于(Map.Entry条目: map.entrySet()) { System.out.println("Key:“+ entry.getKey() +”值:“+ entry.getValue());}

结果:

键:_id值:523f910681a9535f8af5a91 键: ThirdOne值:[{ "explicitElements“:{”explicitElements“:{”explicitElements“:”mytag“,"value":"myrequest"},{”explicitElements“:”booleantest“,”explicitElements“:”true“}}]

我只想

键:"name“值:"mytag” 键:“值”值:“我的请求”等等。

对于如何使用DBObjects实现这一点,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-12 08:30:59

这里有一组值字段,存储在DBObject中,存储在DBList中,存储在DBObject中,存储在DBList中,存储在由DBCursor迭代的DBObjects中。由于这个复杂的文档结构,当您只想输出特定叶子上的文档时,您需要遍历整棵树。

代码语言:javascript
复制
while (cursor2.hasNext()) {
     // you are now iterating a list objects with three Fields:
     // FirstOne, SecondOne and ThirdOne. You only want ThirdOne
     obj = cursor2.next();
     map = obj.toMap();
     DBList thirdOne = (DBList)map.get("ThirdOne");
     // now we iterat the list in ThirdOne
     for (Object o: thirdOne) {
           DBObject thirdOneEntry = (DBObject)o;     
           // we get the explicitElements-array from each entry    
           DBList explicitElements = (DBList)thirdOneEntry.get("explicitElements");
           // now we iterate the expliciteElements         
           for (Object o: explicitElements) { 
               DBObject explicitElementsEntry = (DBObject)o;
               // and write them
               Object key = explicitElementsEntry.get("key");
               Object value = explicitElementsEntry.get("value");
               System.out.println("Key : " + key.toString() + " Value : " value.toString());
           }
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18756057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档