如何使用python高效地将国家信息添加到mongoDB中包含坐标的文档中?
我收集了foursquare的登记数据,但它没有登记国家的信息,只有坐标。我需要知道我正在帮助开发的模型的国家,所以我编写了这个脚本,将每个文档(因为我不想弄乱原始数据)复制到另一个带有这个添加的国家字段的集合中 问题是,这运行速度非常慢。我估计,在我的个人电脑上,大约需要48天才能完成。我不会在我的个人电脑上运行它,但我还是不想让它花太长时间。如果这有什么区别的话,那么我打算在其上运行此功能的计算机正在运行mongodb 3.4.7版。如果有必要,我可以更新它,但我也不愿意 有没有办法更有效地完成这项工作,同时确保我不必从头开始,以防程序中途死掉如何使用python高效地将国家信息添加到mongoDB中包含坐标的文档中?,python,mongodb,geolocation,geopy,Python,Mongodb,Geolocation,Geopy,我收集了foursquare的登记数据,但它没有登记国家的信息,只有坐标。我需要知道我正在帮助开发的模型的国家,所以我编写了这个脚本,将每个文档(因为我不想弄乱原始数据)复制到另一个带有这个添加的国家字段的集合中 问题是,这运行速度非常慢。我估计,在我的个人电脑上,大约需要48天才能完成。我不会在我的个人电脑上运行它,但我还是不想让它花太长时间。如果这有什么区别的话,那么我打算在其上运行此功能的计算机正在运行mongodb 3.4.7版。如果有必要,我可以更新它,但我也不愿意 有没有办法更有效地
from pymongo import MongoClient, ReplaceOne, errors
from geopy.geocoders import Nominatim
_client = MongoClient(port=27017)
_collection = cliente.large_foursquare2014.checkins.find()
documents = list()
geolocator = Nominatim(user_agent="omitting the name i actually used on purpose")
i = 0
j = 0
for document in _collection:
i += 1
if i == 1000:
print(j)
j += 1
cliente.large_foursquare2014.teste.bulk_write(documents)
documents.clear()
i = 0
address = geolocator.reverse((documento['latitude'], documento['longitude'])).raw['address']
document['country2'] = address['country_code'].upper()
documents.append(ReplaceOne({'_id': document['_id']}, document, upsert=True))
cliente.large_foursquare2014.teste.bulk_write(documents)
真正的瓶颈是地理定位呼叫。通过使用反向地理编码器包,性能大约提高了五倍。您确定是MongoDB调用速度慢,因为我猜瓶颈是地理定位器代码。