Setup
Follow the instructions in the MongoDB Setup Guide to get connection string Install MongoDB packagesuv pip install "pymongo[srv]"
Example
agent_with_knowledge.py
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.mongodb import MongoVectorDb
# MongoDB Atlas connection string
"""
Example connection strings:
"mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"
"mongodb://localhost/?directConnection=true"
"""
mdb_connection_string = ""
knowledge_base = Knowledge(
vector_db=MongoVectorDb(
collection_name="recipes",
db_url=mdb_connection_string,
wait_until_index_ready_in_seconds=60,
wait_after_insert_in_seconds=300
),
) # adjust wait_after_insert_in_seconds and wait_until_index_ready_in_seconds to your needs
if __name__ == "__main__":
knowledge_base.insert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
)
agent = Agent(knowledge=knowledge_base)
agent.print_response("How to make Thai curry?", markdown=True)
Async Support ⚡
MongoDB also supports asynchronous operations, enabling concurrency and leading to better performance.
async_mongodb.py
import asyncio
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.mongodb import MongoVectorDb
# MongoDB Atlas connection string
"""
Example connection strings:
"mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"
"mongodb://localhost:27017/agno?authSource=admin"
"""
mdb_connection_string = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"
knowledge_base = Knowledge(
vector_db=MongoVectorDb(
collection_name="recipes",
db_url=mdb_connection_string,
),
)
# Create and use the agent
agent = Agent(knowledge=knowledge_base)
if __name__ == "__main__":
# Load knowledge base asynchronously
asyncio.run(knowledge_base.ainsert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
)
)
# Create and use the agent asynchronously
asyncio.run(agent.aprint_response("How to make Thai curry?", markdown=True))
Use
aload() and aprint_response() methods with asyncio.run() for non-blocking operations in high-throughput applications.MongoDB Params
| Parameter | Type | Description | Default |
|---|---|---|---|
collection_name | str | Name of the MongoDB collection | Required |
name | Optional[str] | Name of the vector database | None |
description | Optional[str] | Description of the vector database | None |
id | Optional[str] | Unique identifier for the vector database | Auto-generated |
db_url | Optional[str] | MongoDB connection string | "mongodb://localhost:27017/" |
database | str | Database name | "agno" |
embedder | Optional[Embedder] | Embedder instance for generating embeddings | OpenAIEmbedder() |
distance_metric | str | Distance metric for similarity | Distance.cosine |
overwrite | bool | Overwrite existing collection and index if True | False |
wait_until_index_ready_in_seconds | Optional[float] | Time in seconds to wait until the index is ready | 3 |
wait_after_insert_in_seconds | Optional[float] | Time in seconds to wait after inserting documents | 3 |
max_pool_size | int | Maximum number of connections in the connection pool | 100 |
retry_writes | bool | Whether to retry write operations | True |
client | Optional[MongoClient] | An existing MongoClient instance | None |
search_index_name | Optional[str] | Name of the search index | "vector_index_1" |
cosmos_compatibility | Optional[bool] | Whether to use Azure Cosmos DB MongoDB vCore compatibility mode | False |
search_type | SearchType | The search type to use when searching for documents | SearchType.vector |
hybrid_vector_weight | float | Default weight for vector search results in hybrid search | 0.5 |
hybrid_keyword_weight | float | Default weight for keyword search results in hybrid search | 0.5 |
hybrid_rank_constant | int | Default rank constant (k) for Reciprocal Rank Fusion in hybrid search | 60 |