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

Update Documents

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

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

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

重要

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

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

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

次の例では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 の詳細については、 Project React ドキュメントのMongoDBを参照してください。

次の例では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)

アップデートを適用する配列要素を指定します。

bypassDocumentValidation(Boolean bypassDocumentValidation)

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

collation(Collation collation)

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

comment(BsonValue comment)

操作に Bson コメントを付けます。 詳細については、 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)

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

upsert(Boolean upsert)

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

upsert操作は、クエリフィルターに一致するドキュメントを更新し、クエリフィルターに一致するドキュメントがない場合は新しいドキュメントを挿入します。

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

Bson filter = Filters.eq("borough", "Manhattan");
Bson update = Updates.set("borough", "Manhattan (north)");
UpdateOptions options = new UpdateOptions().upsert(true);
Publisher<UpdateResult> updateManyPublisher = restaurants.updateMany(filter, update, options);
UpdateResult result = Mono.from(updateManyPublisher).block();
System.out.println("Matched: " + result.getMatchedCount()
+ ", Modified: " + result.getModifiedCount()
+ ", Upserted ID: " + result.getUpsertedId());
Matched: 10259, Modified: 10259, Upserted ID: null

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

方式
説明

getMatchedCount()

アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数。

getModifiedCount()

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

getUpsertedId()

ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 それ以外の場合はnullです。

wasAcknowledged()

更新が確認された場合は true を返します。

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

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

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