2016-12-11 7 views
0
我々のアプリケーションで

は、一つのリクエストの中、私たちは一種の多くのクエリを実行します。Doctrine ODM(MongoDB)findOneByIdが同じIDに対して何度もデータベースをヒットするのはなぜですか?

$ DM-> getRepository( 'バンドル:some_document') - > findOneById($番号)

私の期待は時にということでした私たちはいくつかの固定id(例えば、1)に対して2回目以降の呼び出しを行います。データベースへの実際のクエリは存在しないはずです。ドキュメントの「メモリ内」表現が最初に取得されます。

しかし、それは何度も繰り返しているようです。

これは期待された動作か、何か不足していますか?

答えて

1

$repository->findOneById()は、識別子でドキュメントを要求する場合としない場合があります(基準が識別子にすぎないかどうかを確認する最適化はありません)。$repository->findOneBy($criteria)です。

オブジェクトのメモリ内表現を使用する場合は、$repository->find()を使用する必要があります。最初にlook up your document in the UnitOfWorkになり、ヒットしなかった場合は後でデータベースにヒットします。

+0

トーホー回答ありがとう!それは私が探していたものであり、ドキュメントのhttp://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.htmlでも見つかった "find( )メソッドは、ドキュメントのデータベースを照会する前に、ドキュメントのメモリIDマップ内のローカルをチェックします。 – user1312695

関連する問題