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

通过Telethon获取的Telegram消息列表无法存入MongoDB问题求助

解决Telethon消息存入MongoDB失败的问题

你遇到的核心问题是Telethon返回的Message对象无法直接被MongoDB序列化——MongoDB仅支持JSON兼容的数据类型(如字典、列表、字符串等),而自定义类实例不在其可处理范围内。

解决步骤

  • 将Message对象转换为字典:使用Telethon内置的to_dict()方法,该方法会自动将消息对象的所有属性转换为MongoDB可识别的序列化格式。
  • 可选内存优化:如果待存储的消息数量较大,建议分批插入数据库,避免一次性占用过多内存。
  • 确保客户端正确初始化:你的代码中with TelegramClient被注释,需保证Telegram客户端已正确启动并完成连接。

修改后的代码

from telethon import TelegramClient
import datetime

# 初始化并启动Telegram客户端(替换为你的api_id和api_hash)
client = TelegramClient('mysession', api_id, api_hash)
client.start()

message_list = []
for chat in chats:
    for message in client.iter_messages(chat, offset_date=datetime.date(2023, 1, 31), reverse=True):
        # 将Message对象转为可序列化的字典
        message_dict = message.to_dict()
        message_list.append(message_dict)
        
        # 可选:每积累100条消息就批量插入一次
        # if len(message_list) >= 100:
        #     collection.insert_many(message_list)
        #     message_list.clear()

# 插入剩余未提交的消息
collection.insert_many(message_list)

# 关闭客户端连接
client.disconnect()

可选优化:只存储需要的字段

如果不需要消息的全部属性,可以手动构造字典,减少存储的数据量:

message_dict = {
    'text': message.text,
    'send_date': message.date,
    'sender_id': message.sender_id,
    'chat_id': message.chat_id
}

内容的提问来源于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.03 03:21:03