在使用 async with collection.watch(...) as stream: 监听集合变更时,这个 collection 对象(即 MongoDB 集合连接)应该如何正确获取?
✅ 核心答案
要让 async with collection.watch() 正常工作,collection 必须是一个 motor.motor_asyncio.AsyncIOMotorCollection 实例。
这意味着你需要通过 Motor 异步驱动 的完整链路来创建它:
AsyncIOMotorClient → Database → Collection
✅ 正确获取 collection 对象的步骤
1. 安装 Motor(如果还没安装)
pip install motor
2. 创建全局异步客户端(通常在应用启动时初始化)
from motor.motor_asyncio import AsyncIOMotorClient
from pymongo import ReadPreference
# MongoDB 副本集连接字符串(必须是副本集才能用 watch)
MONGO_URL = "mongodb://127.0.0.1:27017,127.0.0.1:27018/?replicaSet=rs0"
# 创建异步客户端(通常只创建一次,全局复用)
client = AsyncIOMotorClient(
MONGO_URL,
maxPoolSize=10,
minPoolSize=1,
connectTimeoutMS=5000,
serverSelectionTimeoutMS=5000,
socketTimeoutMS=10000,
)
# 获取数据库对象
db = client["your_database_name"] # 替换为你的数据库名
# 获取集合对象(这才是你要的 collection)
collection = db["upload_task_collection"] # 替换为你的集合名
此时:
print

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



