只有通过Motor 获取 mongodb的collection,才能正常使用 async with collection.watch()监听集合变更

在使用 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草莓仙生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值