0

如果值为空,我正在尝试转换记录中的某些字段。我现在可以返回那些具有空值的记录,但我不确定如何更新每条记录。这是我的代码(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 回答