Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

replace イベント

項目一覧

  • 概要
  • 説明
  • 動作
  • ドキュメントの変更前と変更後のイメージ
replace

replaceイベントは、更新操作によってコレクションからドキュメントが削除され、新しいドキュメントに置き換えられた場合( replaceOneメソッドが呼び出された場合など)に発生します。

フィールド
タイプ
説明

_id

ドキュメント

変更ストリーム イベントの識別子として機能するBSONオブジェクト。 この値は、変更ストリームを再開するときにresumeAfterパラメータのresumeTokenとして使用されます。 _idオブジェクトの形式は次のとおりです。

{
"_data" : <BinData|hex string>
}

_dataタイプは、変更ストリームの開始時または再開時にMongoDBのバージョン、および場合によっては機能の互換性バージョン(FCV)によって異なります。 _dataタイプの完全なリストについては、「 再開トークン 」を参照してください。

resumeTokenによる変更ストリームの再開の例については、「 変更ストリームの再開 」を参照してください。

clusterTime

タイムスタンプ

clusterTime は、イベントに関連付けられたoplogエントリからのタイムスタンプです。

oplogのサイズ制限 により、マルチドキュメントトランザクションでは複数のoplogエントリが作成される場合があります。トランザクションでは、特定のoplogエントリでステージされた変更ストリームイベントは同じclusterTime を共有します。

同じclusterTimeを持つイベントが、すべて同じトランザクションに関連するわけではありません。 一部のイベントはトランザクションにまったく関連しません。 MongoDB 8.0以降では、どの配置のイベントにも当てはまる可能性があります。 以前のバージョンでは、この動作は シャーディングされたシャーディングされたクラスター上の イベントでのみ可能でした。

単一のトランザクションのイベントを識別するには、変更ストリーム イベント ドキュメントでlsidtxnNumberの組み合わせを使用できます。

バージョン8.0で変更

collectionUUID

UUID

変更が発生したコレクションを識別するUUID

バージョン 6.0 で追加。

documentKey

ドキュメント

CRUD操作によって作成または変更されたドキュメントの_id値を含むドキュメント。

シャーディングされたコレクションの場合、このフィールドにはドキュメントの完全なシャードキーも表示されます。 _idフィールドは、すでにシャードキーの一部である場合は繰り返されません。

fullDocument

ドキュメント

操作によって作成された新しいドキュメント。

バージョン 6.0 での変更

MongoDB 6.0 以降では、 db.createCollection()create 、またはcollModを使用してchangeStreamPreAndPostImagesオプションを設定すると、 fullDocumentフィールドには挿入、置換、または更新された後のドキュメントが表示されます(ドキュメントがイメージ)。 fullDocumentは常にinsertイベントに含まれます。

fullDocumentBeforeChange

ドキュメント

変更が 操作によって適用される前のドキュメント。 つまり、ドキュメントの変更前のイメージです。

このフィールドは、 db.createCollection()メソッドまたはcreate } コマンドまたはcollModコマンドを使用してコレクションのchangeStreamPreAndPostImagesフィールドを有効にすると使用できます。

バージョン 6.0 で追加。

lsid

ドキュメント

トランザクションに関連付けられたセッションの識別子。

操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。

ns

ドキュメント

イベントの影響を受ける名前空間(データベースと または コレクション)。

ns.coll

string

イベントが発生したコレクションの名前。

ns.db

string

イベントが発生したデータベースの名前。

operationType

string

変更通知が報告する操作のタイプ。

これらの変更イベントのreplaceの値を返します。

txnNumber

NumberLong

wallTime

データベースの操作のサーバー日付と時刻。 wallTimeclusterTimeclusterTimeは と異なり、 はデータベース操作イベントに関連付けられた oplog エントリから取得されたタイムスタンプであるため、

バージョン 6.0 で追加。

MongoDB 6.0 以降では、次の手順を実行すると、ドキュメントが変更される前(または削除される)に フィールドを含むfullDocumentBeforeChangeドキュメントが表示されます。

  1. db.createCollection()create 、またはcollModを使用し、コレクションで新しいchangeStreamPreAndPostImagesフィールドを有効にします。

  2. db.collection.watch()fullDocumentBeforeChange"required"または"whenAvailable"に設定し

変更ストリーム出力のfullDocumentBeforeChangeドキュメントの例:

"fullDocumentBeforeChange" : {
"_id" : ObjectId("599af247bb69cd89961c986d"),
"userName" : "alice123",
"name" : "Alice Smith"
}

変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。

変更ストリーム イベントにおいて、次の条件に当てはまる場合、変更前と変更後のイメージは使用できません。

  • ドキュメントの更新または削除操作時に、コレクションにおいて有効になっていない場合。

  • expireAfterSeconds で設定した、変更前と変更後のイメージ保持時間が経過した後に削除された場合。

    • 次の例では、クラスター全体でexpireAfterSeconds100秒に設定します。

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )
    • 次の例では、expireAfterSeconds を含む現在の changeStreamOptions 設定を返します。

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • expireAfterSecondsoff に設定すると、デフォルトの保持ポリシーが適用されます。対応する変更ストリーム イベントがoplog から削除されるまで、変更前と変更後のイメージは保持されます。

    • 変更ストリーム イベントが oplog から削除されると、 expireAfterSeconds の変更前と変更後のイメージの保持時間にかかわらず、対応する変更前と変更後のイメージも削除されます。

その他の考慮事項

  • 変更前と変更後のイメージを有効にすると、ストレージ容量が消費され、処理時間が増えます。変更前と変更後のイメージは、必要な場合のみ有効にしてください。

  • 変更ストリーム イベントのサイズを 16 メガバイト未満に制限します。イベントのサイズを制限するには、次の方法があります。

    • ドキュメントのサイズを 8 MB に制限します。updateDescription のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、変更ストリーム出力で変更前と変更後のイメージを同時にリクエストできます。

    • updateDescription のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更後のイメージのみをリクエストしてください。

    • 次の場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更前のイメージのみをリクエストしてください。

      • ドキュメントのアップデートがドキュメントの構造または内容のごく一部にしか影響しない場合、そして

      • replace 変更イベントが発生しない場合。replace イベントには、常に変更後のイメージが含まれます。

  • 変更前イメージをリクエストするには、db.collection.watch() で、fullDocumentBeforeChangerequired または whenAvailable に設定します。変更後イメージをリクエストするには、同じ方法で fullDocument を設定します。

  • 変更前のイメージは config.system.preimages コレクションに書き込まれます。

    • config.system.preimages コレクションが大きくなる場合があります。コレクションのサイズを制限するには、前述のとおり、変更前のイメージに expireAfterSeconds 時間を設定します。

    • 変更前のイメージはバックグラウンド プロセスによって非同期で削除されます。

重要

下位互換性のない機能

MongoDB 6.0 以降では、変更ストリームにドキュメントの変更前のイメージと変更後のイメージを使用している場合、以前の MongoDB バージョンにダウングレードする前に、collMod コマンドを使用して各コレクションの changeStreamPreAndPostImages を無効にする必要があります。

Tip

以下も参照してください。

次の例では、 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は、置換ドキュメントの挿入後のドキュメントを表します。

戻る

rename