私はスパイダーが異なるアイテムを書くことができるコレクションのdictオブジェクトを最初に作ろうとしていました。
いくつかの調査の後、私はmongodb docsの 'connection pooling'に出くわし、1つの接続を使用する複数のコレクションではなく、複数のエンドポイントへの接続オブジェクトを作成する必要があることを認識しました。
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])
項目が処理されると、名前を取得し、辞書をチェックして、あなたの質問わからない試合
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
がある場合に挿入し、あなたが2つのデータベースに同じデータを保存したいです? – Umair
解決済み!ありがとうございました – Chris