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

Python向MongoDB插入列表时触发TypeError问题及修正方法

解决MongoDB插入Telegram消息时的TypeError问题

原代码

for chat in chats:
    for message in client.iter_messages(chat, offset_date=datetime.date(2023, 1, 31), reverse=True):
        my_list.append(message)
collection.insert_many(my_list)

报错信息

Exception has occurred: TypeError
document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping

问题原因

client.iter_messages()返回的是Telegram的Message对象,而MongoDB的insert_many()只接受字典(或兼容BSON的映射类型)作为文档,直接插入Message对象会触发类型错误。

正确写法

需要将Message对象转换为字典格式,有两种常用方式:

方式1:直接转为完整字典(包含所有字段)

使用Message对象的to_dict()方法将其转为字典:

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()
        my_list.append(message_dict)
collection.insert_many(my_list)

方式2:提取需要的字段(精简数据)

如果不需要Message的所有字段,可手动提取关键信息,减少存储量:

for chat in chats:
    for message in client.iter_messages(chat, offset_date=datetime.date(2023, 1, 31), reverse=True):
        message_dict = {
            "text": message.text,
            "date": message.date,
            "sender_id": message.sender_id,
            "chat_id": message.chat.id,
            # 按需添加其他字段,比如message.id、message.media等
        }
        my_list.append(message_dict)
collection.insert_many(my_list)

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