$changeStream(集計)
定義
$changeStream
コレクション、データベース、またはクラスター全体に対して変更ストリームカーソルを返します。 集計パイプラインの最初のステージとして使用する必要があります。
$changeStream
ステージの構文は次のとおりです。{ $changeStream: { allChangesForCluster: <boolean>, fullDocument: <string>, resumeAfter: <document> startAfter: <document> startAtOperationTime: <timestamp> } } Parameter説明allChangesForCluster
任意: 変更ストリームにクラスター内のすべての変更を含めるかどうかを設定します。
admin
データベースでのみ開くことができます。fullDocument
任意:
update
操作によって変更された場合、変更通知に完全なドキュメントのコピーを含めるかどうかを指定します。default
: 変更通知には、update
操作の完全なドキュメントは含まれません。updateLookup
: 変更通知には、変更によって変更されたドキュメントのコピーが含まれます。 このドキュメントは、現在の過半数がコミットしたドキュメントであるか、存在しない場合はnull
です。
部分的な更新の場合は、変更通知にも変更の説明が記載されます。
resumeAfter
任意。 変更ストリームの論理的な開始点として再開トークンを指定します。
invalidate
イベント後に変更ストリームを再開するために使用することはできません。resumeAfter
は、startAfter
およびstartAtOperationTime
と排他関係にあります。startAfter
任意。 変更ストリームの論理的な開始点として再開トークンを指定します。
resumeAfter
とは異なり、startAfter
は新しい変更ストリームを作成することで、invalidate
イベント後に通知を再開できます。startAfter
は、resumeAfter
およびstartAtOperationTime
と排他関係にあります。startAtOperationTime
変更ストリームの論理的な開始点として時間を指定します。
resumeAfter
またはstartAfter
フィールドとは併用できません。
Stable API でのサポート
変更ストリームは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 }), "fullDocument": { "_id": ObjectId("62e2ee54c8756c0d5cf6f072"), "name": "Walker Percy" }, "ns": { "db": "test", "coll": "names" }, "documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") } }
変更ストリーム通知の詳細については、「変更イベント 」を参照してください。