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

アップデート ビルダ

このガイドでは、Java Reactive Streams ドライバーの ビルダ を使用して、 更新 を指定する方法を学ぶことができます。

Updatesビルダは、次のタスクを簡素化するためのヘルパー メソッドを提供します。

ドキュメントの更新を期待するいくつかのメソッドは次のとおりです。

  • updateOne()

  • updateMany()

  • bulkWrite()

Updatesクラスは、すべての MongoDB 更新演算子の静的ファクトリー メソッドを提供します。各メソッドは BSON 型のインスタンスを返します。このインスタンスは、更新引数を必要とするあらゆるメソッドに渡すことができます。

Tip

簡潔にするため、更新 クラスと フィルター クラスのメソッドを静的にインポートすることもできます。

import static com.mongodb.client.model.Updates.*;import static com.mongodb.client.model.Filters.*;

次の例では、この静的インポートを前提としています。

このガイドの例では、次のドキュメントを使用します。

{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }}

set() メソッドを使用して、 更新操作でフィールドの値を割り当てます。

次の例では、 qtyフィールドの値を 11 に設定します。

Bson filter = eq("_id", 1);Bson update = set("qty", 11);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

次の例では、元のドキュメントに 2 つの新しいフィールドを追加します。

Bson filter = eq("_id", 1);Bson update = combine(set("width", 6.5), set("height", 10));Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

更新操作でフィールドの値を削除するには、 unset() メソッドを使用します。

次の例では、 qtyフィールドを削除しています。

Bson filter = eq("_id", 1);Bson update = unset("qty");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

setOnInsert() メソッドを使用して、ドキュメントの挿入でのアップデート操作でフィールドの値を割り当てます。

次の例では、アップサートによってドキュメントが挿入された場合、qtyフィールドの値を "7" に設定します。

Bson filter = eq("_id", 1);Bson update = setOnInsert("qty", 7);Publisher<UpdateResult> result = collection.updateOne(filter, update, new UpdateOptions().upsert(true));Mono.from(result).block();

注意

ドキュメントが挿入されていない場合は、変更は行われません。

inc() メソッドを使用して、 更新操作で数値フィールドの値を増加させます。

次の例では、 qtyフィールドの値を「3」ずつ増加させます。

Bson filter = eq("_id", 1);Bson update = inc("qty", 3);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

更新操作で数値フィールドの値を乗算するには、mul() メソッドを使用します。

次の例えでは、 qtyフィールドの値に「2」を掛けます。

Bson filter = eq("_id", 1);Bson update = mul("qty", 2);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

rename() メソッドを使用して、 更新操作内のフィールドの値の名前を変更します。

次の例では、 qtyフィールドの名前を「q」に変更します。

Bson filter = eq("_id", 1);Bson update = rename("qty", "quantity");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

min() メソッドを使用して、 更新操作で指定された 2 つのうち小さい方の数を持つフィールドの値を更新します。

次の例では、 qtyフィールドの値を、現在の値と "2" の最小値に設定します。

Bson filter = eq("_id", 1);Bson update = min("qty", 2);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

max() メソッドを使用して、 更新操作で指定された 2 つののうち大きい方の数を持つフィールドの値を更新します。

次の例では、 qtyフィールドの値を、現在の値の最大値と「8」に設定します。

Bson filter = eq("_id", 1);Bson update = max("qty", 8);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

currentDate() メソッドを使用して、アップデート操作内のフィールドの値をBSON日付として現在の日付に割り当てます。

次の例では、 lastModifiedフィールドの値を BSON 日付として現在の日付に設定します。

Bson filter = eq("_id", 1);Bson update = currentDate("lastModified");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

currentTimestamp() メソッドを使用して、アップデート操作内のフィールドの値をタイムスタンプとして現在の日付に割り当てます。

次の例では、 lastModifiedフィールドの値を BSON タイムスタンプとして現在の日付に設定します。

Bson filter = eq("_id", 1);Bson update = currentTimestamp("lastModified");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

bitwiseOr() 、 bitwiseAnd() 、 bitwiseXor() メソッドを使用して、 更新操作でフィールドの整数値のビット単位の更新を実行します。

次の例では、数値「10」とqtyフィールドの整数値の間でビット単位のORを実行します。

Bson filter = eq("_id", 1);Bson update = bitwiseOr("qty", 10);Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

ビット単位の 演算の結果は 15 になります。

0101 // 5 in binary1010 // 10 in binary----1111 // 15 in binary

上記の例では、元のドキュメントを次の状態にアップデートします。

{ "_id": 1, "color": "red", "qty": 15, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }}

値がまだ 更新操作に存在しない場合に、配列に値を追加するには、 addToSet() メソッドを使用します。

次の例では、 vendorフィールドの配列値に値「C」を追加します。

Bson filter = eq("_id", 1);Bson update = addToSet("vendor", "C");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

更新操作において、配列の最初の要素を削除するにはpopFirst() メソッドを使用し、配列の最後の要素を削除するには opLast() メソッドを使用します。

次の例では、 vendorフィールドの配列値の最初の要素をポップします。

Bson filter = eq("_id", 1);Bson update = popFirst("vendor");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

PullAll() メソッドを使用して、 更新操作で既存の配列から 値のすべてのインスタンスを削除します。

次の例では、 vendor配列からベンダー "A" と "M" を削除します。

Bson filter = eq("_id", 1);Bson update = pullAll("vendor", Arrays.asList("A", "M"));Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

Pull() メソッドを使用して、 更新操作で既存の配列から値のすべてのインスタンスを削除します。

次の例では、 vendor配列から値「D」を削除します。

Bson filter = eq("_id", 1);Bson update = pull("vendor", "D");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

push() メソッドを使用して、 更新操作において配列に値を追加します。

次の例では「C」をvendor配列にプッシュします。

Bson filter = eq("_id", 1);Bson update = push("vendor", "C");Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();

アプリケーションは、前のセクションで説明された更新演算子を 2 つ以上組み合わせて、単一のドキュメントの複数のフィールドを更新できます。

次の例では、 qtyフィールドの値を「6」ずつ増加させ、 colorフィールドの値を「pull」に設定して、 vendorフィールドに「R」をプッシュします。

Bson filter = eq("_id", 1);Bson update = combine(set("color", "purple"), inc("qty", 6), push("vendor", "R"));Publisher<UpdateResult> result = collection.updateOne(filter, update);Mono.from(result).block();