MongoDB - быстрый подсчет документов, связанных с индексированным ключом - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно запросить коллекцию mongoDB (версия 4.0) со 100M документами на основе индексированного поля.Например, если у меня есть коллекция пользователей, и у каждого пользователя есть поле города, которое является строкой, и это поле проиндексировано, я хочу спросить, сколько пользователей имеют какое-то точное значение в поле города (db.users.count({address:"New York"})).Я вижу, что время отклика меняется в зависимости от количества результатов, если есть 20M, оно составляет около 5 секунд.В объяснении () я вижу, что он использует COUNT и есть индексное имя

"stage" : "COUNT_SCAN"

и

"indexName" : "address_1"

Мой вопрос не в mongodb сохранить количество документов, связанных с каждымИндексированный ключ поля для быстрого поиска без сканирования?Есть ли быстрый способ получить эту информацию?

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Нет, это не так. Однако возможно еще одно улучшение:

db.users.ensureIndex({address:1});
db.users.find({{address: 'New York}).count();
0 голосов
/ 05 июня 2019

Вы можете сделать:

db.users.find({address: 'New York'}).count() который, я думаю, быстрее, так как вы проиндексировали address ключ. Я не думаю, что в mongoDB где-нибудь сохраняется информация о количестве элементов в коллекции на основе индексированного ключа. Просто получить данные с помощью индексированного ключа и выполнить .count() должно быть довольно быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...