Как предоставить подсказку в драйвере java-mongodb для поиска - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь настроить некоторые запросы, которые у меня есть на моем mongodb от клиента Java. Проверяя активные запущенные операции для текущей базы данных, я заметил тот факт, что некоторые запросы имеют что-то вроде:

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

они не касаются ни одного индекса. Это правда, в предложении $in может быть до 1k элементов, но только 15-20% запросов не касаются индекса. Монго-кластер является sharded (hash, _id), и я ищу, чтобы получить элементы через индекс _id_ или shaled индекс. Они должны обеспечивать одинаковую производительность - я думаю. Ожидаемый результат должен быть:

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;
...