Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python高效地将国家信息添加到mongoDB中包含坐标的文档中?_Python_Mongodb_Geolocation_Geopy - Fatal编程技术网

如何使用python高效地将国家信息添加到mongoDB中包含坐标的文档中?

如何使用python高效地将国家信息添加到mongoDB中包含坐标的文档中?,python,mongodb,geolocation,geopy,Python,Mongodb,Geolocation,Geopy,我收集了foursquare的登记数据,但它没有登记国家的信息,只有坐标。我需要知道我正在帮助开发的模型的国家,所以我编写了这个脚本,将每个文档(因为我不想弄乱原始数据)复制到另一个带有这个添加的国家字段的集合中 问题是,这运行速度非常慢。我估计,在我的个人电脑上,大约需要48天才能完成。我不会在我的个人电脑上运行它,但我还是不想让它花太长时间。如果这有什么区别的话,那么我打算在其上运行此功能的计算机正在运行mongodb 3.4.7版。如果有必要,我可以更新它,但我也不愿意 有没有办法更有效地

我收集了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调用速度慢,因为我猜瓶颈是地理定位器代码。