2012-05-31 28 views
1

我在Symfony2應用程序中使用Doctrine MongoDB ODM。如何爲mongodb設置默認提交選項?

如何設置默認提交選項(如safe: 3fsync: true)?

理想情況下,我可以在我的YAML配置文件中做到這一點,但是the docs seem to indicate this isn't possible

如果我可以get the Configuration object I should be able to set defaultCommitOptions(如fsync)那裏,但我不知道如何/何時/在哪裏做到這一點。

+0

不知道如何做到這一點,但對所有操作使用fsync會使事情變得非常緩慢。請重新考慮非常有選擇性地使用fsync。 – Derick

回答

2

PR #114開始,您可以使用頂層配置選項default_commit_options。默認情況下,捆綁包將使用與ODM相同的值,即{safe: true}。下面是支持的選項的一個簡單示例:

doctrine_mongodb: 
    default_commit_options: 
     safe: 2  # boolean or positive integer for replication 
     fsync: false # boolean 
     timeout: 10 # integer >= -1 

查看DI擴展的Configuration類和單元測試以獲取更多信息。

對於舊版本的DoctrineMongoDBBundle,Configuration類在服務容器中註冊,這意味着您可以自己實現它。這樣做的兩個選擇是在您自己的包中創建一個編譯器傳遞,並將方法調用添加到服務定義上,或者如果過於複雜,請在運行時代碼中訪問服務實例,並直接調用setDefaultCommitOptions()

感興趣的代碼在DoctrineMongoDBExtensionloadDocumentManager()方法。從那裏,您可以看到爲每個配置實例分配的服務ID(每個DocumentManager存在一個)。我相信你也可以通過getConfiguration()方法獲取DM的配置。

+0

謝謝你的回答!我創建了一個問題:https://github.com/doctrine/DoctrineMongoDBBundle/issues/109。 –

+0

你修好了!搖滾明星! –

+0

從技術上來說,[Chris Jones](http://stackoverflow.com/users/3765/leek)的確如此,然後我將它修改了一下。我將編輯上面的帖子來描述新的選項。 – jmikola