В зависимости от варианта использования «дороже» может означать, к сожалению, «сбой базы данных».
estimatedDocumentCount()
просто считывает метаданные из коллекции;это настолько близко к нулевой стоимости, насколько это возможно.countDocuments()
, с другой стороны, ну, на самом деле, считает документы, как следует из названия.На данный момент это более точно, если это то, что вам нужно.
Тем не менее, нужно очень хорошо понимать патологическую природу формы без фильтра (то есть, запрос {}
) формы countDocuments()
,В случае очень большой коллекции, например, миллиардов документов, вы первым делом поймете, что это неправильный выбор, когда кластер баз данных испытывает каскадный сбой, когда серверы сами попадают в землю.
Таким образом,Я бы сказал, что ваш вопрос задом наперед;вызов estimatedDocumentCount()
всегда по своей природе безопасен с точки зрения вряд ли поставит ваше окружение на колени , с оговоркой, что вы смотрите на метаданные там, так что в определенных сценарияхкластеры и т. д.), это может быть немного неточно.Однако реально, в среде, где вы развернули Mongo, все всегда будет «немного неточным»;т. е. любой счет, который я получаю в этот момент, в любом случае, скорее всего, будет неточным в данный момент.
Напротив, форма без фильтра countDocuments()
по своей сути небезопасна, и при первом вызове еегигантская коллекция станет мощным учебным опытом для O(1)
против O(N)
.