2013-03-27 13 views
12

私はpythonでforループを使用して、pymongoでのクエリの結果をループします。ここでは、コードは次のとおりです。python + pymongo:forループからmongoの既存の文書に新しいフィールドを挿入する方法

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... 

私が持っている問題は、私は、既存の文書(b)に非既存のフィールドgeolocCountryに変数myGeolocCountryを挿入する方法、ありますか?

私は

b['geolocCountry'] = myGeolocCountry 

と試みたが、それはまったく動作しませんでした、それもエラーを生成しません。あなたはこのような更新クエリを実行する必要があり

おかげ

答えて

12

db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}}) 
+0

私はこの洙を試してみましょうn、ありがとう – otmezger

+0

それは働いた、あなたの解決策は、小さな間違いを持っ​​て、tho。 '' myGeolocCountry "'は変数なので '' 'は必要ありません:-)ありがとう – otmezger

2

あなたはあなたのコレクション内のレコードを更新するために、機能update()を使用する必要があります。

アップデートにより、あなたはcollection.find()で上記持っているだけでなく、クエリで見つかったドキュメントを更新する方法を規定する第2のdictを提供同じように(クエリを指定することができるよう なもの:。

db.Docs.update({"geolocCountry":{"$exists":False}}, {"$set": "geolocCountry": myGeolocCountry}) 

を残りの引数のためのAPIをチェックしてください。

0

アップデート後に収集を保存する必要があります。

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)** 
関連する問題