我的表格中有文件:
{"hostname": "myhost1.com", "services": { ... } }
我想做的是以下内容:
dataset = requests.get('http://endpoint.com/hardware.json').json()
for hostname, services in dataset[0].items():
db.titleHardware.update_one({'hostname':hostname},
{services.keys()[0]: services.values()[0]},
True) #upsert
但是,我收到以下错误:
ValueError:update仅适用于$运算符
是否有办法根据"services"
密钥完成整个"hostname"
块的更新(如果hostname
不存在,最终会插入新文档)?我知道我可以编写逻辑来比较我的MongoDB中的内容与我尝试更新/插入的内容,但我希望pymongo
中可能存在某些东西,或者我可以用于此。
答案 0 :(得分:6)
使用replace_one替换文档。
for hostname, services in dataset[0].items():
db.titleHardware.replace_one({'hostname':hostname},
{'hostname':hostname,
services.keys()[0]: services.values()[0]},
True)
答案 1 :(得分:6)
你看过updateOne的mongodb文档了吗?
您必须指定更新运算符,例如$set
:
for hostname, services in dataset[0].items():
db.titleHardware.update_one({'hostname':hostname},
{'$set': {services.keys()[0]: services.values()[0]}},
upsert=True)