python - MongoDB在python中更新对象数组
问题描述
我正在尝试使用对象数组更新 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'>
如何处理?
解决方案
您可以使用内置__dict__
属性将您的对象转换为 pymongo 满意的字典:
from pymongo import MongoClient
from bson.json_util import dumps
db = MongoClient()['mydatabase']
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")
db.mycollection.insert_one(aa.__dict__)
print(dumps(db.mycollection.find_one({}, {'_id': 0}), indent=4))
给出:
{
"name": "Doc1",
"createDate": "01-01-2018",
"updateDate": "05-01-2018"
}
推荐阅读
- sql-server - T-SQL 搜索和替换模式
- javascript - 在第二次出现字符时拆分字符串 JavaScript
- python - 自定义对象检测,带线条的形状检测
- javascript - Antd中如何合并RowSpan
- excel - Excel图表未将不同日期显示为图表中的不同数据点
- android - android.mk:未找到预建的共享库
- python - 根据条件从列表中删除数据帧?
- html - 如何在css中删除奇怪的边框
- rxjs - 根据源 observable 设置 bufferCount 值
- node.js - Sinon.restore() 不适用于命名空间类的继承函数