ドキュメントの置換
Overview
このガイドでは、 Java Reactive Streams ドライバーを使用して、置換操作を実行し、 MongoDBコレクション内のドキュメントを置き換える方法を学習します。
置換操作は、 MongoDBコレクション内の 1 つのドキュメントを、指定した新しいフィールドと値に置き換えます。 置換操作を実行するには、 replaceOne()
メソッドを使用します。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurants
コレクションを使用します。
無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、「 を使い始める 」チュートリアルを参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返されたPublisher
インスタンスを消費します。 Project Reactive ライブラリとその使用方法の詳細については、「 使用 開始 」を 参照してください。 (Reactor ドキュメントの参照)。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、「 MongoDBへのデータの書込み」ガイドを参照してください。
置換操作
置換操作は、 MongoCollection
インスタンスでreplaceOne()
メソッドを使用して実行できます。 このメソッドは、検索条件に一致する最初のドキュメントから_id
フィールドを除くすべてのフィールドを削除し、指定したフィールドと値を空のドキュメントに追加します。
必要なパラメーター
replaceOne()
メソッドには次のパラメーターが必要です。
クエリフィルタードキュメント。置き換えるドキュメントを決定します。
クエリフィルターの詳細については、 「クエリの指定」ガイドを 参照してください 。
新しいドキュメントに挿入するフィールドと値を指定するドキュメントを置き換えます。
置き換えの例
MongoDBコレクション内の単一のドキュメントを置き換えるには、 replaceOne()
メソッドを呼び出し、クエリフィルタードキュメントと置換ドキュメントをパラメーターとして渡します。 次に、 replaceOne()
の結果をMono
から静的Mono.from()
メソッドに渡します。 Mono
は、プロジェクト Reactor ライブラリのクラスです。 Java Reactive Streams では、ドライバー メソッドはコールドPublisher
インスタンスを返します。つまり、返されたPublisher
をサブスクライブしないと、対応する操作は実行されません。 このガイドでは、Project Reactor ライブラリを使用してそれらを消費します。 Mono
の詳細については、 MongoDB を参照してください プロジェクト React のドキュメントを参照してください。
次の例では、 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) | Specifies whether the replace operation bypasses document validation. This lets you
update documents that don't meet the schema validation requirements, if any
exist. For more information about schema validation, see Schema
Validation in the MongoDB
Server manual. |
collation(Collation collation) | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
comment(BsonValue comment) | Attaches a BsonValue comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
comment(String comment) | Attaches a String comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
hint(Bson hint) | Sets the index for the operation as a Bson value.
For more information, see the hint statement
in the MongoDB Server manual. |
hintString(String hint) | Sets the index for the operation as a String value.
For more information, see the hint statement
in the MongoDB Server manual. |
let(Bson variables) | Specifies a map of parameter names and values. Values must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
upsert(Boolean upsert) | Specifies whether the replace operation performs an upsert operation if no
documents match the query filter. For more information, see the upsert
statement
in the MongoDB Server manual. |
変更置換の例
次のコードでは、 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() | The number of documents that matched the query filter, regardless of
how many were replaced. |
getModifiedCount() | The number of documents modified by the replace operation. If a replaced
document is identical to the original, it is not included in this
count. |
getUpsertedId() | The ID of the document that was inserted into the database, if the driver
performed an upsert. If no document was inserted, this value is null . |
wasAcknowledged() | An acknowledgement of the replacement. |
詳細情報
Java Reactive Streams ドライバーを使用してドキュメントを置き換える実行可能なコード例については、 「 MongoDBへのデータの書込み」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。