pymongo update_one(),upsert = True,不使用$运算符

时间:2016-12-12 22:41:58

标签: python mongodb python-2.7 pymongo

我的表格中有文件:

{"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中可能存在某些东西,或者我可以用于此。

2 个答案:

答案 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)