2016-12-12 11 views
3

を使用せずに、私は、フォームの文書を持ってアップサート=真:

{"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 

しかし、私はBAS、全体"services"チャンクのこのアップデートを達成する方法はあり

ValueError: update only works with $ operators

:「は、次のエラーを取得メートル"hostname"キーで編集しました(最終的にhostnameが存在しない場合は新しい文書を挿入します)。私はMongoDBの内容と私が更新/挿入しようとしているものとを比較するロジックを書くことができることを知っていますが、すでにpymongoやこれに使用できるものがあることを期待していました。

答えて

3

replace_oneを使用してドキュメントを置き換えます。

for hostname, services in dataset[0].items(): 
    db.titleHardware.replace_one({'hostname':hostname}, 
           {'hostname':hostname, 
            services.keys()[0]: services.values()[0]}, 
           True) 
0

updateOneのmongodbのマニュアルを見ましたか? $setのような更新演算子を指定する必要があります。