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

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或者我可以使用的内容.

sro*_*ker 8

您是否查看过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)


A. *_*vis 5

使用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)