カーソルは、クエリの結果を指します。カーソルを使用すると、データベースの結果を一度に 1バッチするずつ反復処理できます。
ユースケース
find() メソッドと aggregate() メソッドは、結果のバッチするを持つカーソルを返します。カーソルを手動で反復処理するか、toArray() を使用してドキュメントにアクセスします。詳細については、「mongosh でのカーソルの反復処理」を参照してください。
上限付きコレクションの場合は、追尾可能 (tailable) カーソルを使用して、挿入時にドキュメントを検索します。詳細については、追尾可能 (tailable) カーソル を参照してください。
動作
MongoDB は、次の場合にクライアントセッション内で作成されたカーソルを閉じます。
クライアントはカーソルを使い果たします。
カーソルを手動で閉じます。
セッションを手動で終了する。
セッションがタイムアウトした。
cursorTimeoutMillis はアイドルカーソルのタイムアウトを設定します(デフォルト: 10 分)。MongoDB はこの時間が経過するとセッション外のアイドル カーソルを閉じます。バッチするを返すと、タイムアウトが延長されます。カーソルを手動で閉じるには、killCursors を使用します。
localLogicalSessionTimeoutMinutes はセッション タイムアウトを設定します(デフォルト: 30 分)。セッションを延長するには refreshSessions を使用し、セッションを終了するには killSessions を使用します。
ドライバーと mongosh は、明示的なセッション外で開かれたカーソルの暗黙的なセッションを作成します。
カーソル使用中の同時更新
カーソルによってドキュメントが返されると、読み取り保証 (read concern)のレベルによっては、バックグラウンドで他の操作が実行され、結果に影響が出る可能性があります。 詳細については、「 読み取り分離、整合性、最新性について 」を参照してください。
存在しない mongos データベースのカーソル結果
MongoDB 7.2 以降、 mongos配置で存在しないデータベースを使用しようとする集計パイプライン クエリでは、検証エラーが返されます。
以前のバージョンでは、これらの集計クエリは空のカーソルを返していました。
はじめる
詳細
find 操作と aggregate 操作は バッチ するに達するまで実行されます。クエリは一時停止します。この一時停止されたクエリは、カーソルIDによって識別されるカーソルです。
データベースは、バッチするとカーソルIDを返します。ドライバーと mongosh はこれをクライアント側のカーソルに保存します。さらにドキュメントが存在する場合、カーソルは getMore 経由で次のバッチするを検索します。残りのバッチする結果を確認するには cursor.objsLeftInBatch() を使用し、さらに結果を確認するには cursor.hasNext() を使用します。
カーソル バッチ
カーソルは、16 MiB の最大BSONドキュメントサイズによって制限される結果をバッチで返します。ドキュメント制限を設定するには、cursor.batchSize() を使用します。find() と aggregate() のデフォルトのバッチするサイズは 101 です。後続の getMore 操作にはデフォルトの制限はなく、16 MiB メッセージ サイズのみが適用されます。
ソート
インデックスなしでソート操作を行うクエリでは、結果を返す前にすべてのドキュメントをメモリにロードする必要があります。
カーソル情報
db.serverStatus() は、metrics.cursorフィールドにカーソル メトリクスを返します。詳しくは、metrics.cursor を参照してください。