アップデート ビルダ
項目一覧
Overview
このガイドでは、Java ドライバーで ビルダ を使用して アップデート を指定する方法を学習できます。
「 Updates
ビルダは、次のタスクを簡素化するためのヘルパー メソッドを提供します。
フィールド更新: 特定のフィールドの値を更新または削除
配列の更新: 配列値のあるフィールドの値の更新
複数の更新演算子の組み合わせ: 複数のフィールドを設定や変更するなど、一度に複数の更新を実行
ドキュメントの更新を期待するいくつかのメソッドは次のとおりです。
updateOne()
updateMany()
bulkWrite()
Updates
クラスは、すべての MongoDB 更新演算子の静的ファクトリー メソッドを提供します。 各メソッドはBSON型のインスタンスを返します。このインスタンスは、アップデート引数を必要とする任意のメソッドに渡すことができます。
Tip
簡潔にするために、アップデート クラスのメソッドを静的にインポートすることを選択できます。
import static com.mongodb.client.model.Updates.*;
次の例では、この静的インポートを前提としています。
このガイドの例では、次のドキュメントを使用します。
{ "_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); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 11, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
次の例では、元のドキュメントに 2 つの新しいフィールドを追加します。
Bson filter = eq("_id", 1); Bson update = combine(set("width", 6.5), set("height", 10)); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }, "width": 6.5, "height": 10, }
設定解除
unset() を使用する アップデート操作でフィールドの値を削除するメソッド。
次の例では、 qty
フィールドを削除しています。
Bson filter = eq("_id", 1); Bson update = unset("qty"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
挿入時に設定
setOnInsert() を使用する メソッドを使用して、ドキュメントの挿入に対するアップデート操作でフィールドの値を割り当てます。
次の例では、アップサートによってドキュメントが挿入された場合に、 qty
フィールドの値を 5 に設定します。
Bson filter = eq("_id", 1); Bson update = setOnInsert("qty", 7); collection.updateOne(filter, update, new UpdateOptions().upsert(true));
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
注意
ドキュメントが挿入されていない場合は、変更は行われません。
増分
inc() を使用する メソッドを使用して、更新操作で数値フィールドの値を増加させます。
次の例では、 qty
フィールドの値を「3」ずつ増加させます。
Bson filter = eq("_id", 1); Bson update = inc("qty", 3); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
乗算
multi() を使用する メソッドを使用して、更新操作で数値フィールドの値を乗算します。
次の例えでは、 qty
フィールドの値に「2」を掛けます。
Bson filter = eq("_id", 1); Bson update = mul("qty", 2); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 10, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
rename
rename() を使用する メソッドを使用して、更新操作でフィールドの値の名前を変更します。
次の例では、 qty
フィールドの名前を「q」に変更します。
Bson filter = eq("_id", 1); Bson update = rename("qty", "quantity"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }, "quantity": 5 }
Min
min() の使用 メソッドを使用して、更新操作で指定された 2 つの小さい数を持つフィールドの値を更新します。
Bson filter = eq("_id", 1); Bson update = min("qty", 2); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 2, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Max
max() の使用 更新操作で指定された 2 つののうち大きい方の数を持つフィールドの値を更新します。
次の例では、 qty
フィールドの値を、現在の値の最大値と「8」に設定します。
Bson filter = eq("_id", 1); Bson update = max("qty", 8); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
現在の日付
currentDate() の使用 メソッドを使用して、更新操作内のフィールドの値を BSON 日付として現在の日付に割り当てます。
次の例では、 lastModified
フィールドの値を BSON 日付として現在の日付に設定します。
Bson filter = eq("_id", 1); Bson update = currentDate("lastModified"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-22T21:01:20.027Z" } }
現在のタイムスタンプ
currentTimestamp() の メソッドを使用して、更新操作内のフィールドの値を タイムスタンプとして現在の日付に割り当てます。
次の例では、 lastModified
フィールドの値を BSON タイムスタンプとして現在の日付に設定します。
Bson filter = eq("_id", 1); Bson update = currentTimestamp("lastModified"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$timestamp": { "t": 1616446880, "i": 5 } } }
ビット
ビットごとの Or() を使用する 、 bitWithAnd() 、 ビット Xor() メソッドを使用して、更新操作でフィールドの整数値のビット単位の更新を実行します。
次の例では、数値「10」とqty
フィールドの整数値の間でビット単位のAND
を実行します。
Bson filter = eq("_id", 1); Bson update = bitwiseOr("qty", 10); collection.updateOne(filter, update);
ビット単位の 演算の結果は 15 になります。
0101 1010 ---- 1111
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 15, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Array Updates
セットに追加
addToSet() の使用 値がまだ更新操作に存在しない場合に、配列に値を追加するメソッド。
次の例では、 vendor
フィールドの配列値に値「C」を追加します。
Bson filter = eq("_id", 1); Bson update = addToSet("vendor", "C"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
ポップ
popFirst() を使用する メソッドを使用して、配列の最初の要素と opLast() アップデート操作で配列の最後の要素を削除するメソッド。
次の例では、 vendor
フィールドの配列値の最初の要素をポップします。
Bson filter = eq("_id", 1); Bson update = popFirst("vendor"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
すべてプル
PullAll() を使用する メソッドを使用して、アップデート操作で既存の配列から の値のすべてのインスタンスを削除します。
次の例では、 vendor
配列からベンダー "A" と "M" を削除します。
Bson filter = eq("_id", 1); Bson update = pullAll("vendor", Arrays.asList("A", "M")); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
プル
Pull() を使用する メソッドを使用して、更新操作で既存の配列から値のすべてのインスタンスを削除します。
次の例では、 vendor
配列から値「D」を削除します。
Bson filter = eq("_id", 1); Bson update = pull("vendor", "D"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
プッシュ
push() を使用する メソッドを使用して、更新操作で配列に値を追加します。
次の例では「C」をvendor
配列にプッシュします。
Bson filter = eq("_id", 1); Bson update = push("vendor", "C"); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
複数の更新演算子の組み合わせ
アプリケーションは、前のセクションで説明された更新演算子を 2 つ以上組み合わせて、単一のドキュメントの複数のフィールドを更新できます。
次の例では、 qty
フィールドの値を「6」ずつ増加させ、 color
フィールドの値を「pull」に設定して、 vendor
フィールドに「R」をプッシュします。
Bson filter = eq("_id", 1); Bson update = combine(set("color", "purple"), inc("qty", 6), push("vendor", "R")); collection.updateOne(filter, update);
上記の例では、元のドキュメントを次の状態にアップデートします。
{ "_id": 1, "color": "purple", "qty": 11, "vendor": [ "A", "D", "M", "R" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }