如何在java-mongodb驱动程序中提供提示以进行查找

时间:2019-03-06 13:33:30

标签: java mongodb indexing sharding

我正在尝试从Java客户端调整对mongodb的查询。在检查当前数据库的活动运行操作时,我注意到一个事实,即某些查询具有以下内容:

db.getCollection("buba-collection").find({ _id: { $in: [ "aaaa", "bbb", "cccc"  } });

他们没有触及任何索引。的确,$in子句中最多可以包含1k个元素,但是只有15-20%的查询没有接触到索引。 mongo-cluster被分片(通过_id哈希),我正在寻找通过_id_索引或分片索引来获取元素。他们应该提供相同的性能-我猜。预期结果应为:

db.getCollection("buba-collection").find({ _id: { $in: [ "aaaa", "bbb", "cccc"  } }).hint("sharded_index");

所以,我尝试了什么:

MongoCollection<Document> source = getCollectionHere();
BasicDBList docIds = new BasicDBList();
docIds.addAll(ids);
BasicDBObject inClause = new BasicDBObject("$in", docIds);
BasicDBObject query = new BasicDBObject("_id", inClause);
return source.find(query).batchSize(1000).hint(new BasicDBObject("_id", 1)).iterator();

似乎唯一可行的方法是提供我要的索引列。但是,在mongodb文档中,他们提到您还可以指定索引名称。

我的问题是:我可以在Java中做同样的事情吗?

Mongodb version: 4.0.3;
Java driver version: 3.10.1;
Java: 1.8.200;

0 个答案:

没有答案