pymongo 错误文档必须是 dict 的实例

Posted

技术标签:

【中文标题】pymongo 错误文档必须是 dict 的实例【英文标题】:pymongo error document must be an instance of dict 【发布时间】:2021-06-20 10:06:35 【问题描述】:

我正在尝试将一个对象放入集合中,但我收到错误消息:

raise TypeError("%s must be an instance of dict, bson.son.SON, "
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping

我的代码如下所示:

class DataBase:

    def __init__(self):
        self.myclient = pymongo.MongoClient("mongodb://localhost:27018/")
        self.mydb = self.myclient["MMA_TOURNAMNET"]
        self.tournamnets = self.mydb["tournamnets"]

    def insert_new_tournamnet(self, tournament):
        jason_tour = json.dumps(tournament.__dict__)
        print(jason_tour)
        self.tournamnets.insert_one(jason_tour)

我调用这个类的一个函数,比如:self.data_base.insert_new_tournamnet(tour)

旅游对象变换后的形式为:

"list_fighters": ["Name": "Barry Boday", "Test Status": 0, "Weeks in Bubble": 0, "Name": "Steve Vaughn", "Test Status": 0, "Weeks in Bubble": 0, "Name": "Jack Zink", "Test Status": 1, "Weeks in Bubble": 0], "schedule_list": [["Name": "Barry Boday", "Test Status": 0, "Weeks in Bubble": 0, "Name": "Steve Vaughn", "Test Status": 0, "Weeks in Bubble": 0]]

作为 Json 格式放入集合中似乎很好。但我无法摆脱错误。有什么想法吗?

【问题讨论】:

您不需要将对象序列化为json,只需传递dict 【参考方案1】:

只需将您的记录保留为 dict 并将其传递给 insert_one()

def insert_new_tournamnet(self, tournament):
    self.tournamnets.insert_one(tournament.__dict__)

【讨论】:

以上是关于pymongo 错误文档必须是 dict 的实例的主要内容,如果未能解决你的问题,请参考以下文章

为啥 db.insert(dict) 在使用 pymongo 时将 _id 键添加到 dict 对象

如何跳过重复索引上的错误并继续在 MongoDB 中进一步添加文档(pymongo)

Pymongo 排序错误

如何使用 PyMongo 在重复键错误后继续插入

Pymongo 聚合 $in 列表

pymongo - 使用自定义游标类