You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中无法将Telegram获取的数据存入MongoDB问题求助

问题:Telegram数据无法存入MongoDB

我已成功从Telegram获取数据,但调用collection.insert_many(df)时报错,无法将数据存入MongoDB。

相关代码

for chat in chats:
    with TelegramClient('sessionx', api_id, api_hash) as client:
        for message in client.iter_messages(chat, offset_date=datetime.date(2022, 11, 11), reverse=True):
            print(message)
            data = {"group": chat, "sender": message.sender_id,
                    "text": message.text, "date": message.date}

            temp_df = pd.DataFrame(data, index=[1])
            df = df.append(temp_df)

报错情况

调用collection.insert_many(df)时触发TypeError: documents must be a non-empty list错误。

解决方法

  • 核心问题:参数类型不匹配
    MongoDB的insert_many()要求传入字典组成的非空列表,而你直接传入了DataFrame。把DataFrame转成字典列表即可:

    collection.insert_many(df.to_dict('records'))
    

    to_dict('records')会将DataFrame的每一行转为一个字典,组成符合要求的列表。

  • 优化数据收集流程
    反复创建临时DataFrame并append的效率极低,建议直接收集字典到列表,最后一次性插入:

    data_list = []
    for chat in chats:
        with TelegramClient('sessionx', api_id, api_hash) as client:
            for message in client.iter_messages(chat, offset_date=datetime.date(2022, 11, 11), reverse=True):
                print(message)
                data = {"group": chat, "sender": message.sender_id,
                        "text": message.text, "date": message.date}
                data_list.append(data)
    # 直接插入MongoDB,无需中转DataFrame
    collection.insert_many(data_list)
    
  • 处理特殊字段
    注意message.sender_id或message.text可能为空,message.date是datetime对象(pymongo可自动处理,若有问题可转成字符串):

    data = {"group": chat, "sender": message.sender_id,
            "text": message.text, "date": message.date.strftime("%Y-%m-%d %H:%M:%S")}
    

内容的提问来源于stack exchange,提问作者Ziviz Zaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:20:41