Docs Menu
Docs Home
/ / /
Kotlin コルーチン
/ /

アップデート ビルダ

項目一覧

  • Overview
  • フィールドの更新
  • セット
  • 設定解除
  • 挿入時に設定
  • 増分
  • 乗算
  • rename
  • Min
  • Max
  • 現在の日付
  • 現在のタイムスタンプ
  • ビット
  • Array Updates
  • セットに追加
  • ポップ
  • すべてプル
  • プル
  • プッシュ
  • 複数の更新演算子の組み合わせ

このガイドでは、MongoDB Kotlin ドライバーで ビルダ を使用して アップデート を指定する方法を学びます。

Updatesビルダは、次のタイプのアップデートのヘルパー メソッドを提供します。

  • フィールドの更新

  • Array Updates

  • 複数の更新演算子の組み合わせ

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

  • updateOne()

  • updateMany()

  • bulkWrite()

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

Tip

簡潔にするために、 更新 のメソッドをインポートすることを選択できます。 クラス:

import com.mongodb.client.model.Updates.*

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

この例は、特に指定がない限り、次のデータ クラスによってモデル化されます。

data class PaintOrder (
@BsonId val id: Int,
val color: String,
val qty: Int?,
val vendor: List<Vendor>?,
val lastModified: LocalDateTime?
)
data class Vendor (
val name: String,
)

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

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

val filter = Filters.eq("_id", 1)
val update = Updates.set(PaintOrder::qty.name, 11)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 11,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

unset() を使用する アップデート操作でフィールドの値を削除するメソッド。

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

val filter = Filters.eq("_id", 1)
val update = Updates.unset(PaintOrder::qty.name)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、操作によってドキュメントが挿入された場合に、 colorフィールドの値を"pink"に設定します。

val filter = Filters.eq("_id", 1)
val update = Updates.setOnInsert(PaintOrder::color.name, "pink")
collection.updateOne(filter, update, UpdateOptions().upsert(true))

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

{
"_id": 1,
"color": "pink"
}

注意

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

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

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

val filter = Filters.eq("_id", 1)
val update = Updates.inc(PaintOrder::qty.name, 3)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 8,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、 5であったqtyフィールドの値に2を掛けます。

val filter = Filters.eq("_id", 1)
val update = Updates.mul(PaintOrder::qty.name, 2)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 10,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

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

val filter = Filters.eq("_id", 1)
val update = Updates.rename(PaintOrder::qty.name, "quantity")
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" },
"quantity": 5,
}

min() の使用 メソッドを使用して、指定された値がフィールドの現在の値より小さい場合に、フィールドの値を指定された値に設定します。

次の例では、 2qtyフィールドの現在の値( 5 )より小さいため、 qtyフィールドを2に更新します。

val filter = Filters.eq("_id", 1)
val update = Updates.min(PaintOrder::qty.name, 2)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 2,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、 8qtyフィールドの現在の値( 5 )より大きいため、 qtyフィールドを8に更新します。

val filter = Filters.eq("_id", 1)
val update = Updates.max(PaintOrder::qty.name, 8)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 8,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

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

val filter = Filters.eq("_id", 1)
val update = Updates.currentDate(PaintOrder::lastModified.name)
collection.updateOne(filter, update)

このページは 2023 年 6 月 16 日に記述されているため、前の例では元のドキュメントを次の状態にアップデートします。

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"$date": "2023-06-16T17:13:06.373Z"
}

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

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

// Create a new instance of the collection with the flexible `Document` type
// to allow for the changing of the `lastModified` field to a `BsonTimestamp`
// from a `LocalDateTime`.
val collection = database.getCollection<Document>("paint_orders")
val filter = Filters.eq("_id", 1)
val update = Updates.currentTimestamp(PaintOrder::lastModified.name)
collection.updateOne(filter, update)

このページは 2023 年 6 月 16 日に記述されているため、前の例では元のドキュメントを次の状態にアップデートします。

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"$timestamp": { "t": 1686935654, "i": 3 }
}

ビットごとの Or() を使用する 、 bitWithAnd() ビット Xor() メソッドを使用して、更新操作でフィールドの整数値のビット単位の更新を実行します。

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

val filter = Filters.eq("_id", 1)
val update = Updates.bitwiseOr(PaintOrder::qty.name, 10)
collection.updateOne(filter, update)

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

0101 // bit representation of 5
1010 // bit representation of 10
----
1111 // bit representation of 15

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

{
"_id": 1,
"color": "red",
"qty": 15,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、 nameの値が"C"であるVendorインスタンスをvendor配列に追加します。

val filter = Filters.eq("_id", 1)
val update = Updates.addToSet(PaintOrder::vendor.name, Vendor("C"))
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "C" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

popFirst() を使用する メソッドを使用して、配列の最初の要素と opLast() アップデート操作で配列の最後の要素を削除するメソッド。

次の例えでは、 vendor配列の 最初の エントリを削除します。

val filter = Filters.eq("_id", 1)
val update = Updates.popFirst(PaintOrder::vendor.name)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

PullAll() を使用する メソッドを使用して、アップデート操作において既存の配列から指定された値のすべてのインスタンスを削除します。

次の例では、 vendor配列から"A""M"name値を持つVendorインスタンスを削除します。

val filter = Filters.eq("_id", 1)
val update = Updates.pullAll(PaintOrder::vendor.name, listOf(Vendor("A"), Vendor("M")))
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "D" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Pull() を使用する メソッドを使用して、アップデート操作において既存の配列から指定された値のすべてのインスタンスを削除します。

次の例では、 vendor配列からnameの値が"D"であるVendorインスタンスを削除します。

val filter = Filters.eq("_id", 1)
val update = Updates.pull(PaintOrder::vendor.name, Vendor("D"))
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、 nameの値が"Q"であるVendorインスタンスをvendor配列に追加します。

val filter = Filters.eq("_id", 1)
val update = Updates.push(PaintOrder::vendor.name, Vendor("Q"))
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "Q" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

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

次の例では、 qtyフィールドの値を6ずつ増加させ、 colorフィールドの値を"purple"に設定し、 nameの値が"R"であるVendorインスタンスを に追加します。 vendorフィールド:

val filter = Filters.eq("_id", 1)
val update = Updates.combine(
Updates.set(PaintOrder::color.name, "purple"),
Updates.inc(PaintOrder::qty.name, 6),
Updates.push(PaintOrder::vendor.name, Vendor("R"))
)
collection.updateOne(filter, update)

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

{
"_id": 1,
"color": "purple",
"qty": 11,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "R" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

戻る

ソート ビルダ