pythonでforループを使用して、pymongoを使用したクエリの結果をループしています。コードは次のとおりです。
from pymongo import MongoClient
connection = MongoClient()
db = connection.Test
myDocs = db.Docs.find( { "geolocCountry" : { "$exists" : False } } )
for b in myDrives:
my_lat = b['TheGpsLog'][0]['latitude']
my_long = b['TheGpsLog'][0]['longitude']
myGeolocCountry = DoReverseGeocode(lat_start,long_start)
# Here I perform a reverse geocoding, it does not matter for this example.
# The important thing is: it returns a string, like 'US', 'UK', etc...
私が持っている質問は、変数myGeolocCountry
を既存のドキュメント(geolocCountry
)の存在しないフィールドb
に挿入するにはどうすればよいですか?
で試しました
b['geolocCountry'] = myGeolocCountry
しかし、それはまったく機能しませんでした、それはエラーさえ生成しません。
ありがとう
次のような更新クエリを実行する必要があります。
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
コレクション内のレコードを更新するには、関数 update()
を使用する必要があります。
Updateを使用すると、クエリを指定できます(上記のcollection.find()
と同じですが、クエリで見つかったドキュメントを更新する方法を定義する2番目のdictも提供します。次のようになります。
db.Docs.update({"geolocCountry":{"$exists":False}}, {"$set": "geolocCountry": myGeolocCountry})
残りの引数についてはAPIを確認してください。
pymongo>の場合
db.Doc.update_one({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
複数の更新の場合:
db.Doc.update_many({"geolocCountry": {"$exists": False}}, {"$set": {"geolocCountry": myGeolocCountry}})
pymongo <の場合
上記/前の回答は正しい
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
複数の更新の場合:
db.Doc.update({"geolocCountry": {"$exists": False}}, {"$set": {"geolocCountry": myGeolocCountry}})
更新後にコレクションを保存する必要があります。
for b in myDrives:
my_lat = b['TheGpsLog'][0]['latitude']
my_long = b['TheGpsLog'][0]['longitude']
myGeolocCountry = DoReverseGeocode(lat_start,long_start)
b['geolocCountry'] = myGeolocCountry
**db.Docs.save(b)**