对多个MongoDB集合的碎片写入

对多个MongoDB集合的碎片写入,mongodb,web-scraping,scrapy,web-crawler,pymongo,Mongodb,Web Scraping,Scrapy,Web Crawler,Pymongo,我试图用pymongo和scrapy将不同的项目存储在不同的mongodb集合中 我应该如何创建一个 1) 在spider打开时启动pymongo连接字典, 2) 按名称处理和标识项目, 3) 并将该项插入到给定请求中的一个集合中 我不确定是否有可能在scrapy中写入多个集合。如有任何见解,将不胜感激 我最初试图创建一个集合的dict对象,蜘蛛可以在其中写入不同的项 经过一些研究后,我在mongodb文档中遇到了“连接池”,并意识到我需要创建连接到多个端点的dict对象,而不是使用一个连接创建

我试图用pymongo和scrapy将不同的项目存储在不同的mongodb集合中

我应该如何创建一个 1) 在spider打开时启动pymongo连接字典, 2) 按名称处理和标识项目, 3) 并将该项插入到给定请求中的一个集合中


我不确定是否有可能在scrapy中写入多个集合。如有任何见解,将不胜感激

我最初试图创建一个集合的dict对象,蜘蛛可以在其中写入不同的项

经过一些研究后,我在mongodb文档中遇到了“连接池”,并意识到我需要创建连接到多个端点的dict对象,而不是使用一个连接创建多个集合

class MongoDBPipeline(BaseItemExporter):

 #...

    #item types for mongo to insert to correct collection
     writeTypes = [
        'ent_pfrm', 'ent_prsn', 
        'ent_sctn', 'ent_meet', 
        'ent_venu', 'ent_affn'
     ]

 #...

    def open_spider(self, spider):

        #Set db dict
        self.database = dict([(name,connection[self.config['database']][name]) for name in self.writeTypes]) 
处理项目后,获取名称,检查dict,并插入是否有匹配项

def process_item(self, item, spider):

    def item_type(item):
        return type(item).__name__.replace('_Item','').lower()  # Team_Item => team

    item_name = item_type(item)

    #check if the item matches one of the 'writeTypes'
    if item_name in self.database.keys(): 
        dbcol = self.database[item_name]
        dbcol.insert(item)

    return item

不确定您的问题,是否要将相同的数据存储到两个数据库中?已解决!谢谢乌米尔