replace
イベント
概要
replace
replace
イベントは、更新操作によってコレクションからドキュメントが削除され、新しいドキュメントに置き換えられた場合(replaceOne
メソッドが呼び出された場合など)に発生します。
説明
フィールド | タイプ | 説明 | |||
---|---|---|---|---|---|
| ドキュメント | 変更ストリーム イベントの識別子として機能するBSONオブジェクト。 この値は、変更ストリームを再開するときに
| |||
| タイムスタンプ |
oplogのサイズ制限 により、マルチドキュメントトランザクションでは複数のoplogエントリが作成される場合があります。トランザクションでは、特定のoplogエントリでステージされた変更ストリームイベントは同じ 同じ 単一のトランザクションのイベントを識別するには、変更ストリーム イベント ドキュメントで バージョン8.0で変更。 | |||
| UUID | 変更が発生したコレクションを識別するUUID 。 バージョン 6.0 で追加。 | |||
| ドキュメント | CRUD操作によって作成または変更されたドキュメントの シャーディングされたコレクションの場合、このフィールドにはドキュメントの完全なシャードキーも表示されます。 | |||
| ドキュメント | 操作によって作成された新しいドキュメント。 バージョン 6.0 での変更。 MongoDB 6.0 以降では、 | |||
| ドキュメント | 変更が 操作によって適用される前のドキュメント。 つまり、ドキュメントの変更前のイメージです。 このフィールドは、 バージョン 6.0 で追加。 | |||
| ドキュメント | トランザクションに関連付けられたセッションの識別子。 | |||
| ドキュメント | イベントの影響を受ける名前空間(データベースと または コレクション)。 | |||
| string | イベントが発生したコレクションの名前。 | |||
| string | イベントが発生したデータベースの名前。 | |||
| string | 変更通知が報告する操作のタイプ。 これらの変更イベントの | |||
| NumberLong | トランザクションを一意に識別するのに役立つ数値は、 lsid と合わせて使用されます。 | |||
| データベースの操作のサーバー日付と時刻。 バージョン 6.0 で追加。 |
動作
ドキュメントの変更前と変更後のイメージ
MongoDB 6.0 以降では、次の手順を実行すると、ドキュメントが変更される前(または削除される)に フィールドを含むfullDocumentBeforeChange
ドキュメントが表示されます。
db.createCollection()
、create
、またはcollMod
を使用し、コレクションで新しいchangeStreamPreAndPostImages
フィールドを有効にします。db.collection.watch()
でfullDocumentBeforeChange
を"required"
または"whenAvailable"
に設定し 。
変更ストリーム出力のfullDocumentBeforeChange
ドキュメントの例:
"fullDocumentBeforeChange" : { "_id" : ObjectId("599af247bb69cd89961c986d"), "userName" : "alice123", "name" : "Alice Smith" }
変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。
変更ストリーム イベントにおいて、次の条件に当てはまる場合、変更前と変更後のイメージは使用できません。
ドキュメントの更新または削除操作時に、コレクションにおいて有効になっていない場合。
expireAfterSeconds
で設定した、変更前と変更後のイメージ保持時間が経過した後に削除された場合。次の例では、クラスター全体で
expireAfterSeconds
を100
秒に設定します。use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) 次の例では、
expireAfterSeconds
を含む現在のchangeStreamOptions
設定を返します。db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) expireAfterSeconds
をoff
に設定すると、デフォルトの保持ポリシーが適用されます。対応する変更ストリーム イベントがoplog から削除されるまで、変更前と変更後のイメージは保持されます。変更ストリーム イベントが oplog から削除されると、
expireAfterSeconds
の変更前と変更後のイメージの保持時間にかかわらず、対応する変更前と変更後のイメージも削除されます。
その他の考慮事項
変更前と変更後のイメージを有効にすると、ストレージ容量が消費され、処理時間が増えます。変更前と変更後のイメージは、必要な場合のみ有効にしてください。
変更ストリーム イベントのサイズを 16 メガバイト未満に制限します。イベントのサイズを制限するには、次の方法があります。
ドキュメントのサイズを 8 MB に制限します。
updateDescription
のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、変更ストリーム出力で変更前と変更後のイメージを同時にリクエストできます。updateDescription
のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更後のイメージのみをリクエストしてください。次の場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更前のイメージのみをリクエストしてください。
ドキュメントのアップデートがドキュメントの構造または内容のごく一部にしか影響しない場合、そして
replace
変更イベントが発生しない場合。replace
イベントには、常に変更後のイメージが含まれます。
変更前イメージをリクエストするには、
db.collection.watch()
で、fullDocumentBeforeChange
をrequired
またはwhenAvailable
に設定します。変更後イメージをリクエストするには、同じ方法でfullDocument
を設定します。変更前のイメージは
config.system.preimages
コレクションに書き込まれます。config.system.preimages
コレクションが大きくなる場合があります。コレクションのサイズを制限するには、前述のとおり、変更前のイメージにexpireAfterSeconds
時間を設定します。変更前のイメージはバックグラウンド プロセスによって非同期で削除されます。
重要
下位互換性のない機能
MongoDB 6.0 以降では、変更ストリームにドキュメントの変更前のイメージと変更後のイメージを使用している場合、以前の MongoDB バージョンにダウングレードする前に、collMod
コマンドを使用して各コレクションの changeStreamPreAndPostImages を無効にする必要があります。
Tip
以下も参照してください。
変更ストリーム イベントと出力については、「変更イベント」を参照してください。
コレクションの変更を監視するには、
db.collection.watch()
を参照してください。変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。
例
次の例では、 replace
イベントを示しています。
{ "_id": { <Resume Token> }, "operationType": "replace", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("599af247bb69cd89961c986d") }, "fullDocument": { "_id": ObjectId("599af247bb69cd89961c986d"), "userName": "alice123", "name": "Alice" } }
replace
操作は更新コマンドを使用し、次の 2 つのステージで構成されます。
documentKey
と次と同じ要素を使用して新しいドキュメントを挿入します:
documentKey
replace
イベントのfullDocument
は、置換ドキュメントの挿入後のドキュメントを表します。