Docs Menu
Docs Home
/ / /
Java Sync Driver
/ / /

ドキュメント内の配列の更新

項目一覧

  • Overview
  • サンプルドキュメント
  • 更新を指定する
  • 配列要素の指定
  • 最初に一致する配列要素
  • すべての配列要素の一致
  • 複数の配列要素の一致

このガイドでは、MongoDB Java ドライバーを使用してドキュメント内の配列を更新する方法を学習できます。

配列を更新するには、次の操作を行う必要があります。

  • 実行する更新を指定する

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

  • これらの仕様を使用して更新操作を実行します

次のセクションでは、このサンプル ドキュメントを更新する例を紹介します。

{ "_id": 1, "color": "green", "qty": [8, 12, 18] }

このページの例では、 MongoCollectionクラスの findOneAndUpdate()メソッドを使用してドキュメントを取得とアップデートを行います。 各例では、 FindOneAndUpdateOptionsクラスのインスタンスを使用して、更新後に MongoDB がドキュメントを取得するようにしています。 findOneAndUpdate()メソッドの詳細については、 複合操作 のガイドを参照してください。

更新を指定するには、 Updatesビルダを使用します。 Updatesビルダは、アップデート仕様を構築するための静的ユーティリティ メソッドを提供します。 配列でUpdatesビルダを使用する方法の詳細については、 アップデート ビルダに関するガイド をご覧ください。

次の例では、これらのアクションを実行します。

  • サンプル ドキュメントのクエリ

  • クエリフィルターに一致するドキュメント内のqty配列に「17」を追加します

Bson filter = Filters.eq("_id", 1);
Bson update = Updates.push("qty", 17);
// Defines options that configure the operation to return a document in its post-operation state
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
// Updates the first document that matches the filter and prints the updated document as JSON
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [8, 12, 18, 17] }

位置演算子を使用して、アップデートする配列要素を指定できます。 位置演算子は、アップデートする最初の配列要素、すべて、または特定の配列要素を指定できます。

位置演算子を使用して配列内の要素を指定するには、ドット表記を使用します。 ドット表記は、BSON オブジェクトを操作するためのプロパティ アクセス構文です。

詳細については、 ドット表記 に関するサーバー マニュアル エントリを参照してください。

クエリフィルターに一致する最初の配列要素を更新するには、位置指定の$演算子を使用します。 位置指定の$演算子を使用するには、配列フィールドがクエリフィルターの一部として表示される必要があります。

次の例では、これらのアクションを実行します。

  • 値が「18」を含むqtyフィールドを持つドキュメントをクエリする

  • クエリフィルターに一致するドキュメント内の最初の配列の値を "3" ずつ減算します

Bson filter = Filters.eq("qty", 18);
Bson update = Updates.inc("qty.$", -3);
// Defines options that configure the operation to return a document in its post-operation state
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
// Updates the first document that matches the filter and prints the updated document as JSON
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [8, 12, 15] }

このセクションで述べられたメソッドと演算子の詳細については、次のリソースを参照してください。

配列内のすべての要素を更新するには、すべての位置指定$[]演算子を使用します。

次の例では、これらのアクションを実行します。

  • サンプル ドキュメントのクエリ

  • クエリフィルターに一致する配列要素を "2" 倍します

Bson filter = Filters.eq("_id", 1);
Bson update = Updates.mul("qty.$[]", 2);
// Defines options that configure the operation to return a document in its post-operation state
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
// Updates the first document that matches the filter and prints the updated document as JSON
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [16, 24, 36] }

このセクションで述べられたメソッドと演算子の詳細については、次のリソースを参照してください。

フィルターに一致する配列要素を更新するには、フィルタリングされた位置指定$[<identifier>]演算子を使用します。 アップデート操作に配列フィルターを含めて、アップデートする配列要素を指定する必要があります。

<identifier>は、配列フィルターに付ける名前です。 この値は小文字で始まり、含めることができるのは英数字のみです。

次の例では、これらのアクションを実行します。

  • サンプル ドキュメントのクエリ

  • 配列フィルターを設定して、"15" 未満の値を検索

  • クエリフィルターに一致する配列要素を "5" ずつ増加させます

Bson filter = Filters.eq("_id", 1);
Bson smallerFilter = Filters.lt("smaller", 15);
// Defines options that configure the document's return state and apply the array value filter
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
.arrayFilters(Arrays.asList(smallerFilter));
// Creates an update document to increase the matched array values by "5"
Bson update = Updates.inc("qty.$[smaller]", 5);
// Updates the first document that matches the filter and prints the updated document as JSON
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [13, 17, 18] }

このセクションで述べられたメソッドと演算子の詳細については、次のリソースを参照してください。

戻る

ドキュメントの変更