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