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

replace イベント

項目一覧

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

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

フィールド
タイプ
説明
_id
ドキュメント

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

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

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

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

clusterTime
タイムスタンプ

イベントに関連付けられた 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

lsidと合わせて、トランザクションを一意に識別するのに役立つ数値です。

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

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