テール可能カーソル
デフォルトでは、クライアントがカーソル内のすべての結果を使い果たすと、MongoDB はカーソルを自動的に閉じます。 ただし、 の Cappedコレクションでは、クライアントが初期カーソルの結果を使い果たした後も開いたままの 追尾可能(tailable) カーソルを使用できます。 追尾可能 (tailable) カーソルは、 -f
オプションを指定した tail
Unix コマンドと概念上で同等です(「に従って」モード)。 クライアントがCappedコレクションに追加のドキュメントを挿入した後も、追尾可能 (tailable) カーソルはドキュメントの検索を続行します。
ユースケース
インデックスが実用的ではない、書込み (write) 量が多い Capped コレクションには、 追尾可能 (tailable) カーソル を使用します。 たとえば、MongoDBレプリケーションでは 追尾可能 (tailable) カーソル を使用してプライマリのoplog を追跡します。
注意
クエリがインデックス付きフィールドを対象とする場合は、追尾可能 (tailable) カーソルではなく、通常のカーソルを使用します。 クエリによって返されたインデックス付きフィールドの最後の値を追跡します。 新しく追加されたドキュメントを検索するには、クエリ条件のインデックス付きフィールドの最後の値を使用してコレクションを再度クエリします。 例:
db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )
はじめる
mongosh
で追尾可能 (tailable) カーソルを作成するには、 cursor.tailable()
を参照してください。
ドライバーの 追尾可能 (tailable) カーソル メソッド を確認するには、ドライバーのドキュメントを参照してください。
動作
追尾可能 (tailable) カーソルに関連する次の動作を考慮してください。
追尾可能 (tailable) カーソルはインデックスを使用しません。 ドキュメントは自然な順序で返されます。
追尾可能 (tailable) カーソルはインデックスを使用しないため、クエリの初期スキャンはコストが高くなる可能性があります。 最初にカーソルを使い果たした後は、新しく追加されたドキュメントのその後の取得は低コストです。
現在の位置にあるデータが新しいデータによって上書きされると、追尾可能 (tailable) カーソルが無効になる可能性があります。 たとえば、データ挿入の速度がカーソルの反復速度よりも高速な場合、このような状況が発生する可能性があります。