如何用pymongo在mongodb中创建索引

时间:2018-03-09 01:07:47

标签: python node.js mongodb scrapy 2dsphere

我使用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下的任何索引。 enter image description here

我认为我遵守GeoJson格式。

当我使用2dsphere时,有没有办法在mongodb中保存scrapy索引?或者我应该保存像照片结构这样的数据并通过另一个服务器文件保存索引(如nodejs

任何帮助将不胜感激。提前谢谢。

根据Adam Harrison回复,我尝试将我的mongodb名称location更改为geometry

在我的pipelines.py文件中添加代码import pymongo

并使用self.collection.create_index([("geometry", pymongo.GEOSPHERE)])

没有任何错误,但仍无法找到geometry下的索引 enter image description here

0 个答案:

没有答案