Как указано в документации Mongo для подсчета , вызов count
аналогичен вызову find
, но вместо возврата документов он просто считает их.Чтобы выполнить этот подсчет, он перебирает курсор.Он не может просто прочитать индекс и определить количество документов на основе первого и последнего значения некоторого идентификатора, тем более что у вас может быть индекс для какого-то другого поля, которое не является идентификатором (и идентификаторы Монго не являются автоматически увеличивающимися).Таким образом, в основном find
и count
- это одна и та же операция, но вместо получения документов она просто просматривает их, суммирует их число и возвращает его вам.
Кроме того, если вы хотите получить более быстрый результат, вы можете использовать estimatedDocumentsCount
( docs ), которые будут идти прямо к метаданным коллекции.Это приводит к потере возможности спросить «Какое количество документов я могу ожидать, если я инициирую этот запрос?».Если вам нужно быстрее найти количество документов для запроса, то вы можете использовать countDocuments
( docs ), который является оболочкой для агрегированного запроса.Насколько мне известно о Mongo, предоставленный запрос выглядит как самый быстрый способ подсчета результатов запроса без вызова count
.Я полагаю, что это предпочтительный способ в отношении производительности для подсчета документов с этого момента (так как он появился в версии 4.0.3).