2014-01-25 111 views
0

我正在使用DoctrineMongoDBBundle來管理數據的Symfony 2項目。 我需要處理兩個或更多的實例,但我沒有找到任何幫助來配置。如何使用DoctrineMongoDBBundle處理Mongodb連接?

該文檔說明了如何通過在config.yml文件中添加以下代碼來配置一個默認連接。

doctrine_mongodb: 
    connections: 
     default: 
      server: mongodb://localhost:27017 
      options: {} 
    default_database: test_database 
    document_managers: 
     default: 
      auto_mapping: true 

,並調用文檔管理器我用代碼:

$dm = $this->get('doctrine_mongodb')->getManager(); 

它運作良好,但我沒有找到如何配置更多的連接,以及如何通過使用文件管理器來處理。我認爲它應該看起來像下面的來源,但我不知道如何調用一個特定的連接。

doctrine_mongodb: 
    connections: 
     default: 
      server: mongodb://localhost:27017 
      options: {} 
     second: 
      server: mongodb://localhost:27018 
      options: {} 
    default_database: test_database 
    document_managers: 
     default: 
      auto_mapping: true 
     second: 
      auto_mapping: true 

有什麼想法?

謝謝!

回答

1

此示例在軟件包的config referenceMultiple Connections部分中進行了介紹。每個連接和文檔管理器都應該有一個唯一的名稱,然後文檔管理器配置應該引用相應的連接名稱。我相信最後一點是你原來的例子所缺少的。引用捆綁文檔:

doctrine_mongodb: 
    default_database: hello_%kernel.environment% 
    default_connection: conn2 
    default_document_manager: dm2 
    metadata_cache_driver: apc 
    connections: 
     conn1: 
      server: mongodb://a.example.com:27017 
     conn2: 
      server: mongodb://b.example.com:27017 
    document_managers: 
     dm1: 
      connection: conn1 
      metadata_cache_driver: xcache 
      mappings: 
       AcmeDemoBundle: ~ 
     dm2: 
      connection: conn2 
      mappings: 
       AcmeHelloBundle: ~ 

我會建議使用除「默認」爲您的連接和文件管理等名稱,以避免混淆。請注意,文檔管理器名稱現在將成爲服務ID的一部分。根據上述配置,第二個連接和文檔管理器將被別名爲默認服務ID(請參閱:default_connectiondefault_document_manager)。引用文檔中的第二個示例,具體服務ID將爲:

$conn1 = $container->get('doctrine_mongodb.odm.conn1_connection'); 
$conn2 = $container->get('doctrine_mongodb.odm.conn2_connection'); 
$dm1 = $container->get('doctrine_mongodb.odm.dm1_document_manager'); 
$dm2 = $container->get('doctrine_mongodb.odm.dm2_document_manager');