Java MongoDB:我如何优化这个查询?

Java MongoDB:我如何优化这个查询?,java,mongodb,optimization,Java,Mongodb,Optimization,我想在MongoDB中运行一个查询,该查询返回集合的不同文档网,该集合至少包含字符串数组中的一个元素。例如,如果我有一个包含a、B、C的列表,查询应该返回所有包含“a”或“B”或“C”的不同文档。我写了这个查询: BasicDBList orList = new BasicDBList(); orList.add(new BasicDBObject("A", new BasicDBObject("$exists", true))); orList.add(new BasicDBObject("B

我想在MongoDB中运行一个查询,该查询返回集合的不同文档网,该集合至少包含字符串数组中的一个元素。例如,如果我有一个包含a、B、C的列表,查询应该返回所有包含“a”或“B”或“C”的不同文档。我写了这个查询:

BasicDBList orList = new BasicDBList();
orList.add(new BasicDBObject("A", new BasicDBObject("$exists", true)));
orList.add(new BasicDBObject("B", new BasicDBObject("$exists", true)));
orList.add(new BasicDBObject("C", new BasicDBObject("$exists", true)));

BasicDBObject or = new BasicDBObject("$or", orList);

DBCursor cursor = coll.find(query);
        while (cursor.hasNext()) {
            DBObject obj = cursor.next();
            map.put(Integer.parseInt(obj.get("id").toString()),obj.toMap());
        }
在while循环中,所有获取的文档都将被复制到映射中进行进一步处理但此查询非常耗时且不可扩展。我如何优化它?

我的文件的结构是

{_id:objectid,
 "id":intValue, 
"keyword1":FloatValue,
"keyword2":FloatValue,
"keyword3":FloatValue,
...
}

提前感谢。

您是否尝试过创建部分索引?也读一下这个。因此,您可能需要为查询中的每个字段创建一个解析索引,并运行explain来验证是否使用了索引。不,不幸的是,我对MongoDB中的索引不是很熟悉。我用文件的结构更新我的问题。那么,如何使用索引呢?我阅读了您的建议,但在这种情况下,似乎不可能使用部分索引,因为每个查询中列表的元素都不同。例如,在一个查询A、B、C和另一个查询D、E、F中。