使用 MongoDB 更改流时代码不运行

问题描述

我一直在构建一个 discord 机器人,它会在数据库发生变化时向服务器中的选定频道发送消息,特别是在插入新文档时。我使用 MongoDB 作为数据库,我开始了解 pymongo 中的 collection.watch()。我在 pymongo 文档中给出的 db.py 中编写了 watch() 的代码。 这里的“黑客马拉松”是应用 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 加载,因此机器人没有给出任何响应。如果未调用函数,则机器人可以完美运行。

解决方法

好消息是我运行了你的代码,我可以看到正在通过的更改流。所以这是一个好的开始。

因此,我会让您仔细检查连接字符串、数据库和集合参数是否都设置正确。

变更流的一个问题是,如果您的这些配置不正确,它会很高兴地坐在那里什么都不做......