我的其中一个收藏中有文档,如下所示。
{"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条件。但是我不确定它的效率和性能。
任何有关使用动态键和嵌套组合来获取此类文档列表的正确和有效方法的线索都将非常有帮助。
谢谢
发布于 2019-01-11 17:32:13
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;
}https://stackoverflow.com/questions/41128591
复制相似问题