# Async MongoDB for Agent (/database/providers/async-mongo/usage/async-mongodb-for-agent)



`AsyncMongoDb` stores an Agent's sessions and run history asynchronously in MongoDB. Use async Agent methods such as `arun()` and `aprint_response()`.

## Usage [#usage]

Start in a [virtual environment](/sdk/setup) and set the model key before running the example.

## Set OpenAI Key [#set-openai-key]

Set your `OPENAI_API_KEY` as an environment variable. You can get one [from OpenAI](https://platform.openai.com/account/api-keys).

<CodeBlockTabs defaultValue="Mac">
  <CodeBlockTabsList>
    <CodeBlockTabsTrigger value="Mac">
      Mac
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="Windows PowerShell">
      Windows PowerShell
    </CodeBlockTabsTrigger>
  </CodeBlockTabsList>

  <CodeBlockTab value="Mac">
    ```bash
    export OPENAI_API_KEY=sk-***
    ```
  </CodeBlockTab>

  <CodeBlockTab value="Windows PowerShell">
    ```powershell
    $env:OPENAI_API_KEY = "your-openai-api-key"
    ```
  </CodeBlockTab>
</CodeBlockTabs>

Provide either `db_url` or `db_client`. This example uses `db_url`.

Install the `pymongo` (4.9 or later), `openai`, and `ddgs` packages:

```shell
uv pip install agno "pymongo>=4.9" openai ddgs
```

<Note>
  `motor` clients are also supported, but `motor` is deprecated. Use PyMongo's async client instead.
</Note>

### Run MongoDB [#run-mongodb]

Install [Docker Desktop](https://docs.docker.com/get-started/get-docker/), then start MongoDB on port `27017`:

```bash
docker run -d \
  --name local-mongo \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
  -e MONGO_INITDB_ROOT_PASSWORD=secret \
  mongo
```

```python title="async_mongodb_for_agent.py"
import asyncio

from agno.agent import Agent
from agno.db.mongo import AsyncMongoDb
from agno.tools.websearch import WebSearchTools

db_url = "mongodb://mongoadmin:secret@localhost:27017"

db = AsyncMongoDb(db_url=db_url)

agent = Agent(
    db=db,
    tools=[WebSearchTools()],
    add_history_to_context=True,
)


async def main():
    try:
        await agent.aprint_response("How many people live in Canada?")
        await agent.aprint_response("What is their national anthem called?")
    finally:
        await db.close()


if __name__ == "__main__":
    asyncio.run(main())
```

## Parameters [#parameters]

| Parameter                  | Type                                                    | Default | Description                                                                                   |
| -------------------------- | ------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------- |
| `id`                       | `Optional[str]`                                         | -       | Database ID. Derived deterministically from connection/client and database name when omitted. |
| `db_client`                | `Optional[Union[AsyncIOMotorClient, AsyncMongoClient]]` | -       | The MongoDB async client to use. Supports Motor and PyMongo async clients.                    |
| `db_name`                  | `Optional[str]`                                         | -       | The name of the database to use.                                                              |
| `db_url`                   | `Optional[str]`                                         | -       | The database URL to connect to.                                                               |
| `session_collection`       | `Optional[str]`                                         | -       | Name of the collection to store sessions.                                                     |
| `runs_collection`          | `Optional[str]`                                         | -       | Name of the collection to store session runs.                                                 |
| `memory_collection`        | `Optional[str]`                                         | -       | Name of the collection to store memories.                                                     |
| `metrics_collection`       | `Optional[str]`                                         | -       | Name of the collection to store metrics.                                                      |
| `eval_collection`          | `Optional[str]`                                         | -       | Name of the collection to store evaluation runs.                                              |
| `knowledge_collection`     | `Optional[str]`                                         | -       | Name of the collection to store knowledge documents.                                          |
| `traces_collection`        | `Optional[str]`                                         | -       | Name of the collection to store traces.                                                       |
| `spans_collection`         | `Optional[str]`                                         | -       | Name of the collection to store spans.                                                        |
| `learnings_collection`     | `Optional[str]`                                         | -       | Name of the collection to store learnings.                                                    |
| `schedules_collection`     | `Optional[str]`                                         | -       | Name of the collection to store cron schedules.                                               |
| `schedule_runs_collection` | `Optional[str]`                                         | -       | Name of the collection to store schedule run history.                                         |

## Run the Example [#run-the-example]

Save the code as `async_mongodb_for_agent.py`, complete the prerequisites above, then run:

```bash
python async_mongodb_for_agent.py
```
