使用 MongoDB 更改流时,代码不会 运行
Code does not run while using MongoDB change stream
我一直在构建一个 Discord 机器人,它会在数据库发生变化时向服务器中的选定频道发送消息,特别是在插入新文档时。我正在使用 MongoDB 作为数据库,我开始了解 pymongo 中的 collection.watch() 。我按照 pymongo 文档中给出的 db.py 编写了 watch() 的代码。
这里的“hackathons”是应用watch方法的集合。
def new_hackathon():
try:
resume_token = None
pipeline = [{'$match':{'operationType':'insert'}}]
with hackathons.watch(pipeline) as stream:
for change in stream:
print(change)
resume_token = stream.resume_token
except pymongo.errors.PyMongoError:
if resume_token is None:
logging.error('...')
else:
with hackathons.watch(pipeline, resume_after=resume_token) as stream:
for change in stream:
print(change)
我在另一个文件中调用了 new_hackathon() 函数。
class Channels(commands.Cog):
#class methods
new_hackathon()
def setup(bot):
bot.add_cog(Channels(bot))
对 new_hackathon() 函数的调用不会让 cog 加载,因此机器人不会给出任何响应。如果不调用该函数,则机器人可以完美运行。
好消息是我 运行 你的代码我可以看到变化流。所以这是一个好的开始。
因此,我会让您仔细检查连接字符串、数据库和集合参数是否都设置正确。
更改流的一个问题是,如果您配置不正确,它会很高兴地坐在那里什么也不做...
我一直在构建一个 Discord 机器人,它会在数据库发生变化时向服务器中的选定频道发送消息,特别是在插入新文档时。我正在使用 MongoDB 作为数据库,我开始了解 pymongo 中的 collection.watch() 。我按照 pymongo 文档中给出的 db.py 编写了 watch() 的代码。 这里的“hackathons”是应用watch方法的集合。
def new_hackathon():
try:
resume_token = None
pipeline = [{'$match':{'operationType':'insert'}}]
with hackathons.watch(pipeline) as stream:
for change in stream:
print(change)
resume_token = stream.resume_token
except pymongo.errors.PyMongoError:
if resume_token is None:
logging.error('...')
else:
with hackathons.watch(pipeline, resume_after=resume_token) as stream:
for change in stream:
print(change)
我在另一个文件中调用了 new_hackathon() 函数。
class Channels(commands.Cog):
#class methods
new_hackathon()
def setup(bot):
bot.add_cog(Channels(bot))
对 new_hackathon() 函数的调用不会让 cog 加载,因此机器人不会给出任何响应。如果不调用该函数,则机器人可以完美运行。
好消息是我 运行 你的代码我可以看到变化流。所以这是一个好的开始。
因此,我会让您仔细检查连接字符串、数据库和集合参数是否都设置正确。
更改流的一个问题是,如果您配置不正确,它会很高兴地坐在那里什么也不做...