首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongo查询以获取嵌套键值存在

Mongo查询以获取嵌套键值存在
EN

Stack Overflow用户
提问于 2016-12-14 02:58:51
回答 2查看 949关注 0票数 0

我的其中一个收藏中有文档,如下所示。

代码语言:javascript
运行
复制
  {"id":"1", "properties":{"type1":{"items":[{"name":"A"},{"name":"B"}]}}}
    {"id":"2", "properties":{"type2":{"tasks":[{"name":"X"},{"name":"Y"}, {"name":"Z"}]}}}
    {"id":"3", "properties":{"type3":{"categories":[{"name":"A"},{"name":"P"}, {"name":"Q"}, {"name":"R"}]}}}
    {"id":"4", "properties":{"type4":{"list":[{"name":"D"},{"name":"B"}, {"name":"C"}, {"name":"A"}]}}}

我可以编写一个Mongo find查询来列出所有包含"name":"A“的文档吗?请告诉我做这件事的有效方法。

我可以想出一种可能性,用所有可能的组合创建标准,并将它们作为OR条件。但是我不确定它的效率和性能。

任何有关使用动态键和嵌套组合来获取此类文档列表的正确和有效方法的线索都将非常有帮助。

谢谢

EN

Stack Overflow用户

发布于 2019-01-11 17:32:13

代码语言:javascript
运行
复制
public static ArrayList<String> getKeys(Document it1) throws JSONException {
        ArrayList<String> result = new ArrayList<String>();
        ArrayList<String> resultTemp;
        String temp;
        Document doc;
        JSONArray jsa;

        int len, i;
        System.out.println(it1);
        String js = it1.toJson();
        JSONObject js1 = new JSONObject(js);

        Iterator<String> keys = js1.keys();
        while (keys.hasNext()) {
            String key = keys.next();
            if (key.equals("_id")) {
                result.add(key);
                continue;
            }
            System.out.println(key);

            temp = js1.get(key).toString();
            if (temp.contains(":")) {

                jsa = new JSONArray(temp);
                len = jsa.length();
                for (i = 0; i < len; i++) {
                    JSONObject object = jsa.getJSONObject(i);
                    doc = Document.parse(object.toString());
                    System.out.println(doc);
                    resultTemp = getKeys(doc);
                    for (String keyTemp : resultTemp) {
                        if (!result.contains(key + "." + keyTemp))
                            result.add(key + "." + keyTemp);
                    }
                }
            }

            else {
                result.add(key);
            }

        }

        return result;
    }
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41128591

复制
相关文章

相似问题

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