2017-02-22 5 views
1

pymongo와 치료법을 사용하여 별도의 mongodb 콜렉션에 별도의 아이템을 저장하려고합니다.여러 MongoDB 콜렉션에 쓰는 치료

어떻게는 거미가 열릴 때 1) pymongo 연결의 사전을 시작하는 파이프 라인을 만드는 2) 프로세스를 접근하고, 이름으로 항목을 식별 3) 및 컬렉션 중 하나에 항목을 삽입한다 주어진 요청 내에서.

치료할 때 여러 컬렉션에 쓸 수 있는지 잘 모르겠습니다. 모든 통찰력은 인정 될 것입니다!

+0

확실하지 일치가있는 경우

항목이 처리되면
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를 확인하고 삽입 ? – Umair

+0

해결했습니다! 고마워요. – Chris

답변

1

처음에는 거미가 다른 항목을 쓸 수있는 콜렉션의 개체를 작성하려고했습니다.

일부 연구 끝에 mongodb 문서에서 '연결 풀링'을 발견했으며 1 연결을 사용하는 여러 모음보다는 여러 끝점에 대한 연결 개체를 만들어야한다는 것을 깨달았습니다. 귀하의 질문에 대한

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