为什么我无法使用 Python 将我的电报机器人连接到 Mongodb Atlas?

Why I can't connect my telegram bot to Mongodb Atlas using Python?

这是我的代码

from telegram.ext import Updater, CommandHandler
import os
from pymongo import MongoClient

TOKEN = 'TOKEN'

def get_db(update, context):
    cluster = MongoClient("mongodb+srv://testing:12345678@cluster0.gs9k5.mongodb.net/test?retryWrites=true&w=majority")
    result = list(cluster.get_database('DBNAME')['COLLECTIONNAME'].find({}))
    update.message.reply_text(str(result))

def main():
    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("getdb", get_db))

    updater.start_webhook(listen="#.#.#.#",
                          port=int(PORT),
                          url_path=TOKEN)
    updater.bot.setWebhook('https://MYHEROKUAPP.herokuapp.com/' + TOKEN)

    updater.idle()


if __name__ == '__main__':
    main()

每次我输入 /getdb,机器人都没有给我任何回应。当我尝试了几个实验时,集群变量似乎有一些错误。我使用了 try except 语法,但机器人没有显示任何内容,即使是 except 也没有显示,而且我也找不到错误名称。我正在为电报机器人使用 heroku 服务器。如何解决这个问题?

您可以连接到默认数据库(这是在连接字符串中定义的数据库)并像这样查询集合

client = MongoClient('connect-string')
db = client.get_default_database()
# 'collection_name' is the name of the Mongo collection
list = db.collection_name.find()

我不确定你是否还有这个问题,但到目前为止代码似乎没问题。 尝试将应用信息记录到终端以更好地了解错误是什么。

import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                        level=logging.INFO)
logger = logging.getLogger(__name__)
  1. 可能是您的 MongoDB Atlas 不允许来自您 运行 您的代码所在的服务器的连接。您可以检查您的集群以查看它是否允许从您的服务器访问数据库。您可以将您服务器的IP地址添加到集群中,让它成功访问数据。
  2. 如果您尝试显示其中所有项目的集合很大,Telegram 将抛出错误,因为随后的消息太长。确保您 运行 测试数据库中只有少数项目。
  3. 您应该可以检查您的 heroku 日志或在您的终端中查看可能发生的其他错误