Ответ 1
Вы должны выполнить запрос на обновление следующим образом:
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
Я использую цикл 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
но он вообще не работает, он даже не вызывает ошибку.
Спасибо
Вы должны выполнить запрос на обновление следующим образом:
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
Вы должны использовать функцию update()
, чтобы обновлять записи в вашей коллекции.
С обновлением вы можете указать запрос (как и у вас выше с collection.find()
, но также предоставить второй диктов, который определяет, как вы хотите обновить документы, найденные в запросе.
что-то вроде:
db.Docs.update({"geolocCountry":{"$exists":False}}, {"$set": "geolocCountry": myGeolocCountry})
Проверьте API для остальных аргументов.
вам нужно сохранить коллекцию после обновления.
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)**