Подтвердить что ты не робот

Python + pymongo: как вставить новое поле в существующий документ в mongo из цикла for

Я использую цикл for в python, чтобы перебрать результат запроса с 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

но он вообще не работает, он даже не вызывает ошибку.

Спасибо

4b9b3361

Ответ 1

Вы должны выполнить запрос на обновление следующим образом:

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

Ответ 2

Вы должны использовать функцию update(), чтобы обновлять записи в вашей коллекции.

С обновлением вы можете указать запрос (как и у вас выше с collection.find(), но также предоставить второй диктов, который определяет, как вы хотите обновить документы, найденные в запросе. что-то вроде:

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

Проверьте API для остальных аргументов.

Ответ 3

вам нужно сохранить коллекцию после обновления.

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