定義
$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") } }
変更ストリーム通知の詳細については、「変更イベント 」を参照してください。