【发布时间】:2019-06-28 01:54:18
【问题描述】:
我正在尝试使用 pymongo 在 mongodb 中保存一个对象。我正在调用一个 api,它给了我和对象,通过迭代对象,我能够获取字段和值。但问题是可能有一些字段的值也是一个对象,当我尝试将这些字段存储在 mongodb 中时,我遇到了错误。
错误是文档必须是 dict、bson.son.SON、bson.raw_bson.RawBSONDocument 的实例,或者是从 collections.MutableMapping 继承的类型
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
}
【问题讨论】:
-
变量 'object' 的类型是什么?你能发布一个来自 API 的响应示例吗?
-
d = dict()和d['field2'] = d的目的是什么?你是否递归地将字典分配给它的键?这是一个有效的 Python 表达式,但您的数据库可能不支持它。 -
@Chiefir 抱歉,这是我的错误,我试图将对象内的所有字段存储到
d['filed2']。 -
原来我是这么说的?
-
@VamsiKrishnaB api 返回一个对象,通过这样做
object.__dict__我得到一个对象内的所有字段,例如
标签: django python-3.x pymongo mongoengine