2016-12-11 25 views
0

在我們的應用程序,一個請求中,我們做的排序很多疑問:Doctrine ODM(MongoDB)爲什麼findOneById命中數據庫多次爲相同的ID?

$ DM-> getRepository( '捆綁:some_document') - > findOneById($ ID)

我的期望是,當我們做了第二次和隨後的一些固定ID調用(比如說,1),應該沒有對數據庫的實際查詢,並且我們會得到一些在第一次獲取的文檔的「內存中」表示。

但是,它似乎一次又一次地擊中分貝。

這是預期的行爲還是我們錯過了某些東西?

回答

1

$repository->findOneById()幾乎沒有包裝$repository->findOneBy($criteria)它可能會或可能不會通過其標識符要求文檔(並且沒有優化來查看標準是否只是一個標識符)。

如果要使用對象的內存中表示形式,您需要使用$repository->find(),它首先嚐試到look up your document in the UnitOfWork,並且在稍後沒有命中時纔會點擊數據庫。

+0

感謝您的thorogh答案!這正是我所尋找的,也發現在文檔中http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html「The find( )方法在爲文檔查詢數據庫之前,檢查文檔的內存標識映射中的本地內容。「 – user1312695

相關問題