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
相关产品推荐
相关产品推荐

