MrD*_*Duk 7 python mongodb pymongo python-2.7
我有以下形式的文件:
{"hostname": "myhost1.com", "services": { ... } }
Run Code Online (Sandbox Code Playgroud)
我想做的是以下内容:
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
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
ValueError:update仅适用于$运算符
有没有办法"services"
根据"hostname"
密钥完成整个块的更新(如果hostname
不存在,最终插入新文档)?我知道我可以编写逻辑来比较我的MongoDB中的内容与我正在尝试更新/插入的内容,但我希望可能已经存在某些内容pymongo
或者我可以使用的内容.
您是否查看过mongodb文档的updateOne吗?您必须指定一个更新运算符,例如$set
:
for hostname, services in dataset[0].items():
db.titleHardware.update_one({'hostname':hostname},
{'$set': {services.keys()[0]: services.values()[0]}},
upsert=True)
Run Code Online (Sandbox Code Playgroud)
使用replace_one替换文档.
for hostname, services in dataset[0].items():
db.titleHardware.replace_one({'hostname':hostname},
{'hostname':hostname,
services.keys()[0]: services.values()[0]},
True)
Run Code Online (Sandbox Code Playgroud)