Я пытаюсь настроить некоторые запросы, которые у меня есть на моем 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;