0

値が null の場合、レコード内の特定のフィールドを変換しようとしています。これらのレコードを null 値で返すことができるようになりましたが、各レコードを更新する方法がわかりません。これは私のコードです(Python + pyMongo):

from geopy import geocoders, distance
from pymongo import Connection
import time

db=Connection().blah
coll = db.tweet_info

cursor = coll.find(
                {"$and": [
                            {"coordinates": {"$type":10}}, 
                            {"place": {"$ne": None}}
                    ]}, 
            {"coordinates": 1, "place": 1, "time_normal": 1, "_id":1}, tailable = True, timeout = False)

g = geocoders.Google()

while cursor.alive:
    counter=0
    try:
        doc = cursor.next()
        your_id = doc['_id']
        if not doc['coordinates']:
            counter+=1
            print doc  
            placeName = doc['place']['full_name']
            loc = g.geocode(placeName)
            coll.update({"_id" : your_id},{"$set": {"coordinates": loc}})             
            time.sleep(0.15)                        
        else: 
            pass

    except (ValueError, geocoders.google.GQueryError):
        pass

    except StopIteration:
        break
4

1 に答える 1

0

必要な更新がある場合、更新するドキュメント、および実際のフィールドを更新する対象は次のとおりです。

coll.update({... find ...},
{... update to ...}
)  

更新するには、更新するドキュメントを指定する必要があるため、最初に次を取得する必要があります_id

"_id": 1,// これをここに追加:{"coordinates": 1, "place": 1, "time_normal": 1}

次に、その間にカーソルから取得する必要が_idあり、最終的な更新は次のようになります。

coll.update({"_id" : your_id}, // 
    {"$set": {"coordinates": loc}}
    )  

(コメントいただいてから気づきました)

于 2012-12-19T17:02:54.803 に答える