我正在尝试从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;