gpt4 book ai didi

java - 如何在 java-mongodb 驱动程序中为 find 提供提示

转载 作者:行者123 更新时间:2023-12-05 06:27:47 28 4
gpt4 key购买 nike

我正在尝试从 Java 客户端调整我对 mongodb 的一些查询。检查当前数据库的 Activity 运行操作我注意到一些查询具有类似的事实:

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;

最佳答案

您应该指定字段名称,而不是索引名称。像这样:

return source.find(query).batchSize(1000).hint(new BasicDBObject("field_name", 1)).iterator();

关于java - 如何在 java-mongodb 驱动程序中为 find 提供提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55024356/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com