本文目录导读:

是的,MongoDB 的 Python 驱动已经支持异步操作。
目前主流的异步驱动是 Motor,它是 MongoDB 官方为 Python 异步框架(如 asyncio、Tornado、Twisted)提供的异步驱动程序,Motor 基于 pymongo 和 asyncio 构建,提供了与 pymongo 几乎相同的 API,但所有 I/O 操作都是非阻塞的。
主要异步 MongoDB 驱动
Motor(官方推荐)
- GitHub: mongodb/motor
- 安装:
pip install motor - 特性:
- 原生支持
async/await - 与
pymongo语法高度一致 - 支持连接池、副本集、分片等所有 MongoDB 特性
- 适用于 FastAPI、Tornado、aiohttp 等异步框架
- 原生支持
from motor.motor_asyncio import AsyncIOMotorClient
import asyncio
async def main():
# 创建异步客户端
client = AsyncIOMotorClient("mongodb://localhost:27017")
# 获取数据库和集合
db = client.test_database
collection = db.test_collection
# 插入文档
result = await collection.insert_one({"name": "Alice", "age": 30})
print(f"Inserted ID: {result.inserted_id}")
# 查询文档
doc = await collection.find_one({"name": "Alice"})
print(f"Found document: {doc}")
# 关闭连接
client.close()
asyncio.run(main())
pymongo(同步,但也支持异步)
- pymongo 本身是 同步 的,但在最近的版本中开始引入一些异步功能。
- 注意:
pymongo仍然是同步驱动的核心,Motor 才是官方异步方案。
Motor 的核心特性
异步 CRUD 操作
# 插入
await collection.insert_one(doc)
await collection.insert_many([doc1, doc2])
# 查询
await collection.find_one(query)
cursor = collection.find(query) # 返回异步游标
async for doc in cursor:
print(doc)
# 更新
await collection.update_one(filter, update)
await collection.update_many(filter, update)
# 删除
await collection.delete_one(filter)
await collection.delete_many(filter)
与 FastAPI 集成(示例)
from fastapi import FastAPI
from motor.motor_asyncio import AsyncIOMotorClient
from pydantic import BaseModel
app = FastAPI()
client = AsyncIOMotorClient("mongodb://localhost:27017")
db = client.myapp
class User(BaseModel):
name: str
email: str
@app.post("/users/")
async def create_user(user: User):
result = await db.users.insert_one(user.dict())
return {"id": str(result.inserted_id)}
@app.get("/users/{user_id}")
async def get_user(user_id: str):
user = await db.users.find_one({"_id": ObjectId(user_id)})
return user
对比:同步 vs 异步
| 特性 | pymongo(同步) | Motor(异步) |
|---|---|---|
| 性能 | 阻塞 I/O,高并发时性能差 | 非阻塞 I/O,高并发性能好 |
| 语法 | 同步调用(find_one()) |
异步调用(await find_one()) |
| 适用场景 | 简单脚本、Django 等同步框架 | FastAPI、Tornado、aiohttp 等异步框架 |
| 连接池 | 默认支持 | 默认支持 |
| 官方支持 | 官方维护 | 官方维护 |
何时使用异步?
- 构建高并发的 Web API(如 FastAPI)
- 处理大量 I/O 密集型操作
- 在异步框架中需要非阻塞数据库访问
- 微服务架构中需要高吞吐量
是的,Python 的 MongoDB 驱动已经成熟地支持异步操作,Motor 是官方推荐的异步解决方案,如果你正在使用异步框架(如 FastAPI),或者需要提高 I/O 密集型应用的并发性能,强烈建议使用 Motor。