$result = $collection->find('some constraints')->limit(10);
ここで、「いくつかの制約」を満たすドキュメントが10000であると仮定します。
したがって、このクエリは最初にメモリ内の10000ドキュメントをフェッチし、10を返しますか、それともで指定された10ドキュメントのみをロードしlimit
ますか?
私は最近これについての記事を書きました。つまり、limitを使用すると、ドライバーはサーバーに10個のアイテムのみを要求するため、クライアント側では10個以下のドキュメントがメモリに保存されます。「制限」は厳密にはクライアントのものであり、ドキュメントのフェッチ中にのみ使用されます。クエリは引き続き完全に実行されます。
サーバー側では、find()制約に一致するすべてのドキュメントが読み取られます。つまり、まだメモリにない場合は、OSがそれらをディスクからメモリに入れます。しかし、繰り返しになりますが、MongoDBサーバープロセスから、すべてのドキュメントは常にメモリ内にあります。これをキャッシュし、ディスクとの間でページングを行うのはオペレーティングシステムです。MongoDBがメモリを管理する方法の詳細については、ドキュメントをご覧ください。