Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

Update Documents

項目一覧

  • Overview
  • サンプル データ
  • アップデート操作
  • フィルター
  • 更新演算子
  • 1 つのドキュメントの更新
  • 複数のドキュメントの更新
  • 更新操作をカスタマイズする
  • 戻り値
  • 詳細情報
  • API ドキュメント

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

更新操作は、 MongoDBコレクション内の 1 つ以上のドキュメントを更新します。 updateOne()またはupdateMany()メソッドを使用して更新操作を実行できます。

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

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

重要

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

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

MongoDB では、次の方法で更新操作を実行できます。

  • updateOne()は、検索条件に一致する最初のドキュメントを更新します。

  • updateMany()は、検索条件に一致するすべてのドキュメントを更新します

各更新方法には次のパラメーターが必要です。

  • クエリフィルタードキュメント。更新するドキュメントを決定します。 クエリフィルターの使用の詳細については、「フィルター」セクションを参照してください。

  • ドキュメントを更新し、更新演算子(実行する更新の種類)と変更するフィールドと値を指定します。 更新演算子の詳細については、「更新演算子 」セクションを参照してください。

各アップデート メソッドにはクエリフィルターが必要です。このフィルターは、アップデート対象のドキュメントを選択するドキュメントを決定する検索条件を指定します。 フィルター オブジェクトの作成を容易にするために、ドライバーはフィルター条件ヘルパーメソッドを提供するFiltersクラスを提供します。

ヘルパーのリストを表示するには、 フィルターAPIドキュメントFilters を参照してください 。クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。

ドキュメントのフィールドを変更するために、 MongoDBは 更新演算子 を提供します。 更新演算子を使用して実行する変更を指定するには、 更新ドキュメントを作成します。 アップデート ドキュメントの作成を容易にするために、ドライバーはフィルター条件ヘルパーメソッドを含むUpdatesヘルパークラスを提供します。

重要

_idフィールドは不変であるため、ドキュメント内の_idフィールドの値を変更することはできません。

更新演算子の詳細については、サーバー マニュアルの「更新演算子 」を参照してください。

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

次の例ではupdateOne()メソッドを使用して、一致するドキュメントのnameの値を"Bagels N Buns"から"2 Bagels 2 Buns"にアップデートします。

Publisher<UpdateResult> updatePublisher =
restaurants.updateOne(eq("name", "Bagels N Buns"),
set("name", "2 Bagels 2 Buns"));
Mono.from(updatePublisher).block();

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

次の例ではupdateMany()メソッドを使用して、 cuisineの値が"Pizza"のすべてのドキュメントを更新して、 cuisineの値が"Pasta"になります。

Publisher<UpdateResult> updatePublisher =
restaurants.updateMany(eq("cuisine", "Pizza"),
set("cuisine", "Pasta"));
Mono.from(updatePublisher).block();

UpdateOptionsクラスには、アップデート メソッドの動作を変更するメソッドが含まれています。 UpdateOptionsクラスを使用するには、クラスの新しいインスタンスを作成し、そのメソッドの 1 つ以上を呼び出して 更新操作を変更します。 これらのメソッド呼び出しを連鎖させることができます。 更新操作の動作を変更するには、クラスインスタンスと連鎖したメソッド呼び出しを メソッドまたは メソッドの 3updateOne() updateMany()つ目の引数として渡します。

更新操作を変更するには、 UpdateOptionsクラスの次の任意のメソッドを使用します。

方式
説明
arrayFilters(List<? extends Bson> arrayFilters)
Specifies which array elements an update applies to.
bypassDocumentValidation(Boolean bypassDocumentValidation)
Specifies whether the update 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(Bson comment)
Attaches a Bson 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.
hint(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 update operation performs an upsert operation if no documents match the query filter. For more information, see the upsert statement in the MongoDB Server manual.

次のコードでは、 updateMany()メソッドを使用して、 boroughフィールドの値が"Manhattan"であるすべてのドキュメントを検索します。 次に、これらのドキュメントのborough値を"Manhattan (north)"にアップデートします。 upsertオプションがtrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、 Java Reactive Streams ドライバーは新しいドキュメントを挿入します。

Publisher<UpdateResult> updatePublisher = restaurants.updateMany(
eq("borough", "Manhattan"),
set("borough", "Manhattan (north)"),
new UpdateOptions().upsert(true));
Mono.from(updatePublisher).block();

updateOne()メソッドとupdateMany()メソッドはそれぞれUpdateResultオブジェクトを返します。 UpdateResult型には次のインスタンスメソッドが含まれています。

方式
説明
getMatchedCount()
The number of documents that matched the query filter, regardless of how many were updated.
getModifiedCount()
The number of documents modified by the update operation. If an updated document is identical to the original, it is not included in this count.
getUpsertedId()
The ID of the document that was upserted in the database, if the driver performed an upsert. Otherwise null.
wasAcknowledged()
Returns true if the update was acknowledged.

更新演算子の詳細については、 MongoDB Serverマニュアルの「更新演算子 」を参照してください。

Java Reactive Streams ドライバーを使用してドキュメントを挿入する実行可能なコード例については、 「 MongoDBへのデータの書込み」ガイドを参照してください。

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

戻る

Insert