MongoDBは、カーソルの繰り返しを開始するとすぐに、ドキュメントをバッチで返します(デフォルトのバッチサイズは101です)。最初の反復では、最初のバッチでドキュメントを取得するためにサーバにコールがヒットし、ドライバはこれらのドキュメントをローカルに格納します。その後の反復では、反復がバッチサイズに達するまでローカルから文書を提供します。したがって、102回目の反復ドライバでは、サーバにコールを送信して次のバッチを取得します。
foreach($cursor as $entry){}
アプローチ2:
あなたはfind
方法でオプションのパラメータbatchSize
を提供することにより、バッチサイズを設定することができ、より多くのヘルプがhere
アプローチ1を見つけることができます
foreach($cursor->toArray() as $entry){}
$cursor->toArray
は、カーソルを反復して結果を配列に返すように実装されています。したがって、これらのアプローチのいずれかを使用した場合、サーバーと同じ数の呼び出しが行われます。唯一の違いは、のアプローチ2を使用して結果セットの単一の配列を取得することです。 2アプローチを使用しての
欠点:
- 一度
toArray
方法で、あなたは、アレイからエントリを取得するときに1回、2回繰り返した結果セット。 - 結果セットに多数のドキュメントがある場合、メモリの問題(メモリ不足)が発生する可能性があります。あなたの質問から
回答:あなただけのオプション提供することで、(明示的にbatchSize
を設定し、カーソル反復中にサーバーへのコール数を最小限に抑えたい場合は
アプローチ1は、実装する方が良いだろうパラメータbatchSize
をfind
方法で)。