DBCursor
query
に関連すると見なされる一連のドキュメントを反復処理できます find()
に渡されます 方法。基盤となるデータベースからbatchSizeのチャンクでこれらのドキュメントを遅延フェッチします。 。
したがって、デフォルトのバッチサイズ(101、IIRC)では、最初の101ドキュメントがクライアントに返され、クライアントコードが101番目のドキュメントを超えて反復すると、(舞台裏で)次の101ドキュメントが取得されます。次のうち最初に発生するのは:
- クエリに関連するすべてのドキュメントが返されます。つまり、カーソルが使い果たされます
- クライアントは反復を停止します
明示的なbatchSizeを設定する場合も、同じことが当てはまります。 したがって、あなたの場合、 batchSize =500
を設定すると 、 find()
呼び出しはDBCursor
を返します これには(最大で)500のドキュメントが含まれ、クエリに一致するドキュメントが500を超える場合、500番目のドキュメントを超えて反復すると、MongoDB Javaドライバーは(舞台裏で)次のバッチをフェッチします。
あなたが言った...
... 500個のドキュメントしか取得できない場合は、500個のドキュメントの後で反復を停止したか、500個のドキュメントのみがクエリ
に関連していると見なされました。 。
count()
を使用すると、クエリに関連するドキュメントの数を確認できます。 方法。例:
int count = collection.find(query).count();
クエリに関連するすべてのドキュメントを一度に取得することもできます。 DBCursor
を使用せずに このように...
List<DBObject> obj = collection.find(query).toArray();
...もちろん、これはアプリケーションのヒープに影響を与える可能性があります。これは、基準を満たすすべてのドキュメントがクライアントのヒープに保存されるためです(<コードを介してバッチで読み取るよりメモリフレンドリーなアプローチではありません)。> DBCursor 。