Docs Menu
Docs Home
/ / /
PyMongo

Switch from PyMongo to PyMongo Async

On this page

  • Overview
  • Switch From PyMongo
  • Asynchronous Methods
  • Additional Information

Important

The PyMongo Async driver is experimental and should not be used in production environments. Classes, methods, and behaviors described in this guide might change prior to the full release. If you encounter any issues with PyMongo Async, you can learn how to report them on the Issues & Help page.

The PyMongo Async driver is a unification of PyMongo and the Motor library. In this guide, you can identify the changes you must make to switch from PyMongo to PyMongo Async.

The PyMongo Async driver behaves similarly to PyMongo, but all methods that perform network operations are coroutines and must be awaited. To switch from PyMongo to PyMongo Async, you must update your code in the following ways:

  • Replace all uses of MongoClient with AsyncMongoClient.

  • Add the await keyword to all asynchronous method calls.

  • If you call an asynchronous method inside of a function, mark the function as async.

The following sections describe how to implement the asynchronous API.

The following tables list the asynchronous methods that are available in the PyMongo Async driver. To call these methods, you must await them and call them inside an async function.

Method
Example
AsyncMongoClient()
from pymongo import AsyncMongoClient
async with AsyncMongoClient(...)
watch()
async with await client.watch(...) as stream:
...
server_info()
await client.server_info(...)
list_databases()
await client.list_databases()
list_database_names()
await client.list_database_names()
drop_database()
await client.drop_database(...)
Method
Example
watch()
async with await db.watch(...) as stream:
...
create_collection()
await db.create_collection(...)
aggregate()
async with await client.admin.aggregate(...) as cursor:
...
command()
await db.command(...)
cursor_command()
await db.cursor_command(...)
list_collections()
await db.list_collections()
list_collection_names()
await db.list_collection_names()
drop_collection()
await db.drop_collection(...)
validate_collection()
await db.validate_collection(...)
dereference()
await db.dereference(...)
Method
Example
watch()
async with await collection.watch(...) as stream:
...
insert_one()
await collection.insert_one(...)
insert_many()
await collection.insert_many(...)
replace_one()
await collection.replace_one(...)
update_one()
await collection.update_one(...)
update_many()
await collection.update_many(...)
drop()
await collection.drop()
delete_one()
await collection.delete_one(...)
delete_many()
await collection.delete_many(...)
find_one()
await collection.find_one(...)
estimated_document_count()
await collection.estimated_document_count()
count_documents()
await collection.count_documents(...)
create_index()
await collection.create_index(...)
create_indexes()
await collection.create_indexes(...)
drop_index()
await collection.drop_index(...)
drop_indexes()
await collection.drop_indexes()
list_indexes()
await collection.list_indexes()
index_information()
await collection.index_information()
list_search_indexes()
await collection.list_search_indexes()
create_search_index()
await collection.create_search_index(...)
create_search_indexes()
await collection.create_search_indexes(...)
drop_search_index()
await collection.drop_search_index(...)
update_search_index()
await collection.update_search_index(...)
options()
await collection.options()
aggregate()
async for doc in await collection.aggregate(...):
...
aggregate_raw_batches()
async for batch in await collection.aggregate_raw_batches(...):
...
rename()
await collection.rename(...)
distinct()
await collection.distinct(...)
find_one_and_delete()
await collection.find_one_and_delete(...)
find_one_and_replace()
await collection.find_one_and_replace(...)
find_one_and_update()
await collection.find_one_and_update(...)

To learn more about asynchronous Python, see the Python Asyncio documentation.

Back

Migrate from Motor