$changeStream(集計)
定義
$changeStream
コレクション、データベース、またはクラスター全体に対して変更ストリームカーソルを返します。 集計パイプラインの最初のステージとして使用する必要があります。
$changeStream
ステージの構文は次のとおりです。{ $changeStream: { allChangesForCluster: <boolean>, fullDocument: <string>, fullDocumentBeforeChange: <string>, resumeAfter: <document> showExpandedEvents: <boolean>, startAfter: <document> startAtOperationTime: <timestamp> } } Parameter説明allChangesForCluster
任意: 変更ストリームにクラスター内のすべての変更を含めるかどうかを設定します。admin
データベースでのみ開くことができます。fullDocument
任意:
update
操作によって変更された場合、変更通知に完全なドキュメントのコピーを含めるかどうかを指定します。default
: 変更通知には、update
操作の完全なドキュメントは含まれません。required
: 変更通知には、変更の直後に表示される変更されたドキュメントのコピーが含まれます。 ドキュメントが見つからない場合、変更ストリームはエラーをスローします。このオプションを使用するには、まず
collMod
コマンドを使用してchangeStreamPreAndPostImages
オプションを有効にする必要があります。バージョン 6.0 で追加。
updateLookup
: 変更通知には、変更によって変更されたドキュメントのコピーが含まれます。 このドキュメントは、現在の過半数がコミットしたドキュメントであるか、存在しない場合はnull
です。whenAvailable
: 変更通知には、変更の直後に表示されるように変更されたドキュメントのコピーが含まれます。ドキュメントが利用できない場合はnull
です。このオプションを使用するには、まず
collMod
コマンドを使用してchangeStreamPreAndPostImages
オプションを有効にする必要があります。バージョン 6.0 で追加。
部分的な更新の場合は、変更通知にも変更の説明が記載されます。
fullDocumentBeforeChange
変更前の完全なドキュメントを含めます。 このフィールドは、次の値を受け入れます。
off
: 変更前のドキュメントを含めることを無効にします。whenAvailable
: 変更前のドキュメントが含まれます。 変更されていないドキュメントが利用できない場合、クエリは失敗しません。required
: 変更前のドキュメントが含まれます。 変更されていないドキュメントが利用できない場合、クエリは失敗します。
resumeAfter
任意。 変更ストリームの論理的な開始点として再開トークンを指定します。
invalidate
イベント後に変更ストリームを再開するために使用することはできません。resumeAfter
は、startAfter
およびstartAtOperationTime
と排他関係にあります。showExpandedEvents
DDL やインデックス操作などの追加の変更イベントを含めるかどうかを指定します。
バージョン 6.0 で追加。
startAfter
任意。 変更ストリームの論理的な開始点として再開トークンを指定します。
resumeAfter
とは異なり、startAfter
は新しい変更ストリームを作成することで、invalidate
イベント後に通知を再開できます。startAfter
は、resumeAfter
およびstartAtOperationTime
と排他関係にあります。startAtOperationTime
変更ストリームの論理的な開始点として時間を指定します。resumeAfter
またはstartAfter
フィールドとは併用できません。
Stable API でのサポート
変更ストリームはStable API V 1に含まれています。 ただし、 showExpandedEventsオプションは Stable API V 1に含まれていません。
例
集計ステージを使用して変更ストリーム カーソルを作成するには、 aggregate
コマンドを実行します。
var cur = db.names.aggregate( [ { $changeStream: {} } ] )
カーソルを開くには、 cur
を実行します。
変更ストリームが変更を検出すると、 next()
メソッドは変更イベント通知を返します。 たとえば、 cur.next()
の実行後、MongoDB は次のようなドキュメントを返します。
{ "_id": { _data: "8262E2EE54000000022B022C0100296E5A100448E5E3DD01364019AE8FE8C6859527E046645F6964006462E2EE54C8756C0D5CF6F0720004" }, "operationType": "insert", "clusterTime": Timestamp({ t: 1659039316, i: 2 }), "wallTime": ISODate("2022-07-28T20:15:16.148Z"), "fullDocument": { "_id": ObjectId("62e2ee54c8756c0d5cf6f072"), "name": "Walker Percy" }, "ns": { "db": "test", "coll": "names" }, "documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") } }
変更ストリーム通知の詳細については、「変更イベント 」を参照してください。