mongodb/python/pymongo の初心者。私の mongodb クライアント コードは問題なく動作します。ここにあります :
db.meteo.find().forEach( function(myDoc) {
db.test.update({"contract_name" : myDoc.current_observation.observation_location.city},
{ $set: { "temp_c_meteo" : myDoc.current_observation.temp_c ,
}
},
{upsert:false,
multi:true})
})
これにより、contract_name (テスト コレクションから) が current_observation.observation_location.city (meteo コレクションから) と等しい場合、テスト コレクション内のすべてのドキュメントに temp_c_meteo 列が追加されます。そして、それが私が欲しいものです!
しかし、これがPythonでも同じように機能することを望みます。Python 2.7-pymongo 2.6.3 がインストールされています。しかし、Python 2.4.6 (64 ビット) および 3.4.0 (64 ビット) も同様です。
Python スクリプトの一部を次に示します。
[...]
saveInDB:
#BE connected to MongoDB client
MDBClient = MongoClient()
db = MDBClient ['test']
collection = db['infosdb']
[...]
meteos = collectionMeteo.find()
for met in meteos:
logging.info('DEBUG - Update with meteo ' + met['current_observation']['observation_location']['city'])
result = collection.update_many( {"contract_name" : met['current_observation']['observation_location']['city']},
{
"$set": {"temp_c_meteo" : met['current_observation']['temp_c']}
})
そして、私が得るエラーがあります: ==> [06/21/2016 10:51:03 AM] [WARNING]: 'Collection' object is not callable. 「コレクション」オブジェクトで「update_many」メソッドを呼び出すつもりだった場合、そのようなメソッドが存在しないため失敗しています。
この問題は、いくつかの pymongo リリースに関連している可能性があることを読みました (「メソッドの保存と更新は非推奨です」。そのため、update_many を使用しようとしています)。ありがとう