我使用scrapy爬取数据并将其保存到mongodb,我想将2dsphere
索引保存在mongodb中。
这是我的带有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 格式。
当我使用时,有什么方法可以在 mongodb 中保存2dsphere
索引scrapy
?或者我应该只保存照片结构等数据并通过另一个服务器文件保存索引(如nodejs
)
任何帮助,将不胜感激。提前致谢。
根据Adam Harrison
回应,我尝试将我的 mongodb 名称更改location
为geometry
比import pymongo
在我的 pipelines.py 文件中添加代码
并使用self.collection.create_index([("geometry", pymongo.GEOSPHERE)])