@@ -119,7 +119,7 @@ constructor accepts. All parameters are optional.
119119 :wikipedia:`round-robin DNS <Round-robin_DNS>` addresses.
120120
121121 **Data type:** ``Union[str, Sequence[str]]``
122- **Default value:** ``"localhost"``
122+ | **Default value:** ``"localhost"``
123123
124124 * - ``port``
125125 - The port number {+mdb-server+} is running on.
@@ -128,17 +128,35 @@ constructor accepts. All parameters are optional.
128128 instead of using this parameter.
129129
130130 **Data type:** ``int``
131- **Default value:** ``27017``
131+ | **Default value:** ``27017``
132132
133133 * - ``document_class``
134134 - The default class that the client uses to decode BSON documents returned by queries.
135- This parameter supports the ``bson.raw_bson.RawBSONDocument`` type, as well as
136- subclasses of the ``collections.abc.Mapping`` type, such as ``bson.son.SON``.
135+ This parameter accepts the following types:
137136
138- If you specify ``bson.son.SON`` as the document class, you must also specify types
139- for the key and value.
137+ - ``bson.raw_bson.RawBSONDocument``. To learn more about the ``RawBSONDocument`` class,
138+ see :ref:`pymongo-bson-raw`.
139+
140+ - A subclass of the ``collections.abc.Mapping`` type, such as ``OrderedDict``.
141+ Depending on the strictness of your type-checking rules, you might also need to
142+ specify types for the key and value, as shown in the following example:
143+
144+ .. code-block:: python
145+
146+ client = MongoClient(document_class=OrderedDict[str, int])
147+
148+ - A subclass of the ``TypedDict`` type. To pass a ``TypedDict`` subclass for this
149+ parameter, you must also include the class in a type hint for your ``MongoClient``
150+ object, as shown in the following example:
151+
152+ .. code-block:: python
153+
154+ client: MongoClient[MyTypedDict] = MongoClient()
155+
156+ .. include:: /includes/type-hints/typeddict-availability.rst
140157
141158 **Data type:** ``Type[_DocumentType]``
159+ **Default:** ``dict``
142160
143161 * - ``tz_aware``
144162 - If this parameter is ``True``, the client treats ``datetime`` values as aware.
@@ -231,28 +249,46 @@ To use multiprocessing with {+driver-short+}, write code similar to the followin
231249 Do not copy an instance of the ``MongoClient`` class from the parent process to a child
232250 process.
233251
234- Type Hints
252+ .. _pymongo-type-hints-client:
253+
254+ Type Hints
235255----------
236256
237- If you're using Python v3.5 or later, you can add type hints to your Python code.
257+ .. include:: /includes/ type- hints/intro.rst
238258
239- The following code example shows how to declare a type hint for a ``MongoClient``
240- object:
259+ To use type hints in your {+driver-short+} application, you must add a type annotation to your
260+ ``MongoClient`` object, as shown in the following example :
241261
242262.. code-block:: python
243263
244264 client: MongoClient = MongoClient()
245265
246- In the previous example, the code doesn't specify a type for the documents that the
247- ``MongoClient`` object will work with. To specify a document type,
248- include the ``Dict[str, Any]`` type when you
249- create the ``MongoClient`` object, as shown in the following example:
266+ For more accurate type information, you can include the generic document type
267+ ``Dict[str, Any]`` in your type annotation. This data type matches all documents in MongoDB.
268+ The following example shows how to include this data type in your type annotation:
250269
251270.. code-block:: python
252271
253272 from typing import Any, Dict
254273 client: MongoClient[Dict[str, Any]] = MongoClient()
255274
275+ If all the documents that you are working with correspond to a single custom type, you
276+ can specify the custom type as a type hint for your ``MongoClient`` object. This
277+ provides more accurate type information than the generic ``Dict[str, Any]`` type.
278+
279+ The following example shows how to specify the ``Movie`` type as a type hint for a
280+ ``MongoClient`` object:
281+
282+ .. code-block:: python
283+
284+ from typing import TypedDict
285+
286+ class Movie(TypedDict):
287+ name: str
288+ year: int
289+
290+ client: MongoClient[Movie] = MongoClient()
291+
256292Troubleshooting
257293---------------
258294
@@ -317,6 +353,9 @@ process.
317353 multithreaded contexts with ``fork()``, see `Issue 6721 <http://bugs.python.org/issue6721>`__
318354 in the Python Issue Tracker.
319355
356+ .. include:: /includes/type-hints/troubleshooting-client-type.rst
357+
358+ .. include:: /includes/type-hints/troubleshooting-incompatible-type.rst
320359
321360API Documentation
322361-----------------
0 commit comments