2012-12-19 75 views
0

我想轉換我的記錄中的某些字段,如果有值爲空。我現在可以用空值返回這些記錄,但我不確定如何更新每條記錄。這是我的代碼(Python的+ pyMongo):MongoDB無法更新值

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 
+1

我得到一個:類型錯誤:更新()接受至少3個參數(給出2個)。我還想確保代碼在迭代整個集合時更新特定記錄。謝謝 – user94628

回答

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}} 
    ) 

(您的評論後剛剛意識到)

+1

謝謝,我試過了(請參閱我在原始代碼中的編輯),但它仍不會使用新值更新集合。 – user94628

+0

哦不,不是那樣的更新,你需要輸入實際的id對象。考慮添加'your_id = doc ['_ id']',你必須將你找到的'_id'賦值給一個變量,然後......再試一次。 – slownage

+0

謝謝,我改變了這一點。但它仍然沒有更新集合中的這些值。 – user94628