【发布时间】:2019-12-29 23:10:37
【问题描述】:
我正在尝试使用对象数组更新 mongodb,但收到错误。 这是我的代码
class DocDetails:
def __init__(self, _name, _createDate, _updateDate):
self.name = _name
self.createDate = _createDate
self.updateDate = _updateDate
aa = DocDetails("Doc1","01-01-2018","05-01-2018")
bb = DocDetails("Doc2","09-12-2019","20-12-2019")
testArray = []
testArray.append(aa)
testArray.append(bb)
print(testArray[1].name) #Print Doc2, which is right
targetCollectionName.update(
{'_id':item['_id']},
{ '$push':{'DocumentDetails': {'$each': testArray}}
},
upsert=False
)
现在我收到编码错误
bson.errors.InvalidDocument: cannot encode object: <__main__.DocDetails object at 0x03F14410>, of type: <class '__main__.DocDetails'>
如何处理?
【问题讨论】:
-
我认为你应该对数组进行 jsonify 并传递它。
-
我已经尝试过了,如果我尝试像 json.dumps(testArray) 那样对数组进行 jsonify。它说 DocDetails 类型的对象不是 JSON 可序列化 如果我对每个数组对象进行 jsonify 或使 DocDetails JSON 可序列化,那么数据将作为“字符串数组”而不是“对象数组”上传到 mongodb
-
是的,您必须手动将其转换为 json 对象。您可以在 DocDetails 类中定义一个函数并为每个对象调用它。根据我对 MongoDB 的理解,它接受 json 字符串作为参数而不是对象。
标签: python arrays mongodb push pymongo