Как сохранить словарь с ключом, имеющим значение типа объекта - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сохранить объект в mongodb, используя pymongo.Я вызываю API, который дает мне и объект, и, перебирая объект, я могу получить поля и значения.Но проблема в том, что могут быть некоторые поля, значение которых также является объектом, и когда я пытался сохранить такие файлы в mongodb, я получаю ошибки.

Ошибка - документ должен быть экземпляром dict, bson.son.SON, bson.raw_bson.RawBSONDocument или тип, который наследуется от коллекций. Изменяемое отображение

models.py

class UnusedResources(Document):
    field1 = fields.StringField(max_length=20)
    field2 = fields.DictField()

pythonоболочка

object = API   #calling api
d = dict()

d['field1'] = None
d['field2'] = object.__dict__  #converted all fields of object into dict and stored in d['field2']

client = MongoClient('127.0.0.1', 27017)
db = client.CESdatabase
collection = db.registration_unusedresources
collection.insert_one(d)

поля внутри объекта

{
 'additional_properties': {}, 
 'id': '/subscriptions/XXX/resourceGroups/auth-user-api/providers/Microsoft.Network/loadBalancers/XXX', 
 'name': 'XXX',  
 'sku': <azure.mgmt.network.v2018_11_01.models.load_balancer_sku_py3.LoadBalancerSku object at 0x0000000004E05D30>,
 'probes': [<azure.mgmt.network.v2018_11_01.models.probe_py3.Probe object at 0x0000000004E05DA0>], 
 'inbound_nat_rules': [], 
 'inbound_nat_pools': [], 
 'outbound_rules': None
}

1 Ответ

0 голосов
/ 04 февраля 2019

В вашем ответе API есть экземпляр azure.mgmt.network.v2018_11_01.models.load_balancer_sku_py3.LoadBalancerSku и azure.mgmt.network.v2018_11_01.models.probe_py3.Probe.Это то, что Монго не может хранить (это правильно).Вам также нужно определить, как вы хотите их сериализовать.

...