Skip to content
This repository was archived by the owner on Dec 1, 2025. It is now read-only.

Refactor count to count_documents and estimated_document_count - #62

Merged
jkassemi merged 1 commit into
masterfrom
jk-pymongo-deprecated-count
Jan 23, 2025
Merged

Refactor count to count_documents and estimated_document_count#62
jkassemi merged 1 commit into
masterfrom
jk-pymongo-deprecated-count

Conversation

@jkassemi

Copy link
Copy Markdown

PyMongo ~=4.0 removes Cursor.count and Collection.count and provides two new count methods: Collection.count_documents and Collection.estimated_document_count. 1

image

When possible, we now try using the estimated document count for count operations, but if a limit or skip is defined, or a hint is provided, we'll use the more accurate count. This mirrors the behavior of the upstream mongoengine implementation.

Collection.count_documents issues an aggregate query, which is accurate in all cases, but relatively expensive. Collection.estimated_document_count in PyMongo >=4.0,<4.2 uses a $collStats aggregation to estimate the document count for the collection. In PyMongo >4.2 it relies on the count MongoDB command.

Footnotes

  1. https://pymongo.readthedocs.io/en/stable/migrate-to-pymongo4.html#collection-count-and-cursor-count-is-removed

PyMongo `~=4.0` removes `Cursor.count` and `Collection.count` and provides
two new count methods: `Collection.count_documents` and
`Collection.estimated_document_count`.

Both `Cursor.count` and `Collection.count` in PyMongo `~=3.0` use `count` MongoDB
command, which provide potentially inaccurate results when executd without a query
predicate, in a transaction, or on a sharded cluster.

`Collection.count_documents` issues an aggregate query, which is accurate in
all cases, but relatively expensive.

`Collection.estimated_document_count` in PyMongo `>=4.0,<4.2` uses a $collStats
aggregation to estimate the document count for the collection. In PyMongo `>4.2`
it relies on the `count` MongoDB command.

When possible, we now try using the estimated document count for count operations,
but if a limit or skip is defined, or a hint is provided, we'll use the more accurate
count.

This mirrors the behavior of the upstream mongoengine implementation.
@jkassemi
jkassemi requested a review from wojcikstefan January 22, 2025 21:21
Comment thread setup.py
@jkassemi
jkassemi merged commit a4cc37f into master Jan 23, 2025
@jkassemi
jkassemi deleted the jk-pymongo-deprecated-count branch January 23, 2025 20:58
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants