我使用scrapy抓取数据并将其保存到mongodb,我想在mongodb中保存2dsphere
索引。
这是我的带有scrapy的pipelines.py文件
from pymongo import MongoClient
from scrapy.conf import settings
class MongoDBPipeline(object):
global theaters
theaters = []
def __init__(self):
connection = MongoClient(
settings['MONGODB_SERVER'],
settings['MONGODB_PORT'])
self.db = connection[settings['MONGODB_DB']]
self.collection = self.db[settings['MONGODB_COLLECTION']]
def open_spider(self, spider):
print 'Pipelines => open_spider =>'
def process_item(self, item, spider):
global theaters
# get the class item name to be collection name
self.collection = self.db[type(item).__name__.replace('_Item','')]
if item['theater'] not in theaters:
print 'remove=>',item['theater']
theaters.append(item['theater'])
self.collection.remove({'theater': item['theater']})
# insert the collection name that is from class object item
self.collection.insert(dict(item))
# Here is what i try to create 2dsphere index
self.collection.create_index({"location": "2dsphere"})
return item
当我使用self.collection.create_index({"location": "2dsphere"})
显示错误TypeError: if no direction is specified, key_or_list must be an instance of list
如果我尝试
self.collection.create_index([('location', "2dsphere")], name='search_index', default_language='english')
不再有任何错误,但我的mongodb仍然没有location
下的任何索引。
我认为我遵守GeoJson格式。
当我使用2dsphere
时,有没有办法在mongodb中保存scrapy
索引?或者我应该保存像照片结构这样的数据并通过另一个服务器文件保存索引(如nodejs
)
任何帮助将不胜感激。提前谢谢。
根据Adam Harrison
回复,我尝试将我的mongodb名称location
更改为geometry
在我的pipelines.py文件中添加代码import pymongo
并使用self.collection.create_index([("geometry", pymongo.GEOSPHERE)])