Overview
このガイドでは、 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クラスの次のメソッドを使用します。
方式 | 説明 |
|---|---|
| 置換操作がドキュメントの検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。 |
| 結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。 |
| 操作に |
| 操作に |
| 操作のインデックスを |
| 操作のインデックスを |
| パラメーター名と値のマップを指定します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
| 操作に適用するソート基準を設定します。 |
| クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。 詳細については、 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タイプから次のメソッドを使用します。
プロパティ | 説明 |
|---|---|
| 置き換えられたドキュメントの数に関係なく、クエリフィルターに一致したドキュメントの数。 |
| 置換操作によって変更されたドキュメントの数。置換されたドキュメントが元と同一の場合、このカウントには含まれません。 |
| ドライバーがアップサートを実行した場合、データベースに挿入されたドキュメントのID 。 ドキュメントが挿入されていない場合、この値は |
| 置換の確認応答。 |
詳細情報
Java Reactive Streams ドライバーを使用してドキュメントを置き換える実行可能なコード例については、 CRUD操作ガイド を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。