AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

ドキュメントの置換

このガイドでは、 Java Reactive Streams ドライバーを使用して、置換操作を実行し、 MongoDBコレクション内のドキュメントを置き換える方法を学習します。

置換操作は、 MongoDBコレクション内の 1 つのドキュメントを、指定した新しいフィールドと値に置き換えます。 replaceOne()メソッドを使用して置換操作を実行できます。

このガイドの例では、Atlas サンプル データセットsample_restaurants.restaurants コレクションを使用します。

無料のMongoDB Atlas cluster を作成し、サンプルデータセットをロードする方法については、 使い始めるチュートリアルを参照してください。

重要

プロジェクトリ アクター ライブラリ

このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返された Publisher インスタンスを消費します。Project Reactive ライブラリとその使用方法の詳細については、React ドキュメントの使用開始を参照してください。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、 「 MongoDBへのデータの書込み 」ガイドを参照してください。

置換操作は、 MongoCollectionインスタンスでreplaceOne()メソッドを使用して実行できます。 このメソッドは、検索条件に一致する最初のドキュメントから_idフィールドを除くすべてのフィールドを削除し、指定したフィールドと値を空のドキュメントに追加します。

replaceOne() メソッドには次のパラメーターが必要です。

  • クエリフィルタードキュメント。置き換えるドキュメントを決定します。クエリフィルターの詳細については、 「クエリの指定」ガイドを 参照してください 。

  • 新しいドキュメントに挿入するフィールドと値を指定するドキュメントを置き換えます。

MongoDBコレクション内の単一のドキュメントを置き換えるには、replaceOne() メソッドを呼び出し、クエリフィルタードキュメントと置換ドキュメントをパラメーターとして渡します。次に、replaceOne() の結果を Mono から静的 Mono.from() メソッドに渡します。 Mono は、プロジェクト Reactor ライブラリのクラスです。Java Reactive Streams では、ドライバー メソッドはコールド Publisher インスタンスを返します。つまり、返された Publisher をサブスクライブしないと、対応する操作は実行されません。このガイドでは、Project Reactor ライブラリを使用してそれらを消費します。Mono の詳細については、 Project React ドキュメントのMongoDBを参照してください。

次の例では、 replaceOne()メソッドを使用して、ドキュメントのフィールドと値をnameフィールド値"Pizza Town"に置き換えます。 replaceOne()メソッドは、元のドキュメントを、 nameフィールド値が"Mongo's Pizza"でかつcuisineフィールド値が"Pizza"であるドキュメントに置き換えます。

Publisher<UpdateResult> replacePublisher = restaurants.replaceOne(
eq("name", "Pizza Town"),
new Document().append("name", "Mongo's Pizza")
.append("cuisine", "Pizza"));
Mono.from(replacePublisher).block();

オプションで、オプション メソッドを呼び出して、 replaceOne()メソッドの動作を変更できます。 ReplaceOptionsクラスは、 replaceOne()メソッドの動作を変更するメソッドを提供します。 ReplaceOptionsクラスを使用するには、クラスの新しいインスタンスを構築し、そのメソッドの 1 つ以上を呼び出して 置換操作を変更します。 これらのメソッド呼び出しを連鎖させることができます。 置換操作の動作を変更するには、クラスインスタンスと連結されたメソッド呼び出しをreplaceOne()メソッドの最後の引数として渡します。

replaceOne()メソッドを変更するには、 ReplaceOptionsクラスの次のメソッドを使用します。

方式
説明

bypassDocumentValidation(Boolean bypass)

置換操作がドキュメントの検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。

collation(Collation collation)

結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。

comment(BsonValue comment)

操作に BsonValue コメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。

comment(String comment)

操作に String コメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。

hint(Bson hint)

操作のインデックスを Bson 値として設定します。 詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

hintString(String hint)

操作のインデックスを String 値として設定します。 詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

let(Bson variables)

パラメーター名と値のマップを指定します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

sort(Bson sort)

操作に適用するソート基準を設定します。 replaceOne() メソッドに渡すクエリフィルターに複数のドキュメントが一致する場合、その操作は最初の結果を置き換えます。このオプションを に設定すると、一致したドキュメントに順序を適用し、置き換えられるドキュメントをより詳細に制御できます。

upsert(Boolean upsert)

クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。

次のコードでは、 replaceOne()メソッドを使用して、 restaurantsコレクション内のドキュメントを置き換えます。 また、クエリフィルターが既存のドキュメントと一致しない場合に、ドライバーが新しいドキュメントを挿入するようにupsert(true)オプションも設定します。

Publisher<UpdateResult> replacePublisher = restaurants.replaceOne(
eq("name", "Food Town"),
new Document().append("name", "Food World")
.append("cuisine", "Mixed"),
new ReplaceOptions().upsert(true));
Mono.from(replacePublisher).block();

replaceOne()メソッドはUpdateResultオブジェクトを返します。 対応する情報にアクセスするには、 UpdateResultタイプから次のメソッドを使用します。

プロパティ
説明

getMatchedCount()

置き換えられたドキュメントの数に関係なく、クエリフィルターに一致したドキュメントの数。

getModifiedCount()

置換操作によって変更されたドキュメントの数。置換されたドキュメントが元と同一の場合、このカウントには含まれません。

getUpsertedId()

ドライバーがアップサートを実行した場合、データベースに挿入されたドキュメントのID 。 ドキュメントが挿入されていない場合、この値は null です。

wasAcknowledged()

置換の確認応答。

Java Reactive Streams ドライバーを使用してドキュメントを置き換える実行可能なコード例については、 CRUD操作ガイド を参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。