次の形式のドキュメントがあります。
{"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:更新は$演算子でのみ機能します
"services"
キーに基づいて"hostname"
チャンク全体のこの更新を実行する方法はありますか(そして、hostname
が存在しない場合、最終的に新しいドキュメントを挿入します)? MongoDBの内容と更新/挿入しようとしている内容を比較するロジックを作成できることはわかっていますが、pymongo
にすでに何かがあるか、これに使用できるものがあるかと期待していました。
Replace_oneを使用してドキュメントを置き換えます。
for hostname, services in dataset[0].items():
db.titleHardware.replace_one({'hostname':hostname},
{'hostname':hostname,
services.keys()[0]: services.values()[0]},
True)
pdateOne のmongodbドキュメントをご覧になりましたか? $set
などの更新演算子を指定する必要があります。
for hostname, services in dataset[0].items():
db.titleHardware.update_one({'hostname':hostname},
{'$set': {services.keys()[0]: services.values()[0]}},
upsert=True)