sql >> データベース >  >> NoSQL >> MongoDB

Mongowithjava-バッチサイズでクエリを検索

    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 。



    1. マングース:ObjectIdsでaddToSetを使用すると、孤立したIDになります

    2. ApacheHBaseリージョンの分割とマージ

    3. マングースコレクションで自動インクリメント番号を挿入する方法

    4. MongoDBシェルとサーバーが一致しません