AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Update Documents

このガイドでは、 Kotlin Sync ドライバーを使用して MongoDBupdateOne() updateMany()コレクション内のドキュメントを更新する方法を学習できます。これには メソッドと メソッドが使用されます。

このガイドの例では、Atlas サンプル データセットsample_restaurants.restaurants コレクションを使用します。無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。

このコレクション内のドキュメントは、次の Kotlin データ クラスによってモデル化されます。

data class Restaurant(
val name: String,
val borough: String,
val cuisine: String,
val address: Document
)

次の方法を使用して、MongoDB 内のドキュメントを更新できます。

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

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

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

  • クエリフィルター。アップデートするドキュメントに一致する。 クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。

  • 更新ドキュメント。更新演算子または実行する更新の種類と、更新されるフィールドと値を指定します。 更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「 フィールド更新演算子 」のガイド ページ を参照してください。

次の例では、 updateOne()メソッドを使用して、ドキュメントのnameの値を"Happy Garden"から"Mountain House"に更新します。

val filter = eq(Restaurant::name.name, "Happy Garden")
val update = set(Restaurant::name.name, "Mountain House")
val result = collection.updateOne(filter, update)

次の例では、 updateMany()メソッドを使用して、 nameの値が"Starbucks"であるすべてのドキュメントを更新します。 アップデートにより、 addressフィールドの名前がlocationに変更されます。

val filter = eq(Restaurant::name.name, "Starbucks")
val update = rename(Restaurant::address.name, "location")
val result = collection.updateMany(filter, update)

updateOne()メソッドとupdateMany()メソッドは、更新操作を構成するためのオプションを設定する パラメーターをオプションで受け入れます。 オプションを指定しない場合、ドライバーはデフォルト設定で更新操作を実行します。

次の表では、 UpdateOptionsインスタンスを構成するために使用できる setter メソッドについて説明します。

プロパティ
説明

upsert()

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

sort(Bson sort)

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

bypassDocumentValidation()

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

collation()

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

arrayFilters()

アップデートを適用する配列要素を選択するために指定するフィルターのリストを提供します。

hint()

ドキュメントをマッチングするときに使用するインデックスを設定します。 詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

let()

操作の最上位変数を設定するためのパラメーター名と値のマップを提供します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

comment()

操作に添付するコメントを設定します。 詳細については、 MongoDB Serverマニュアルの 「更新コマンド フィールドのガイド」を参照してください。

次のコードでは、 updateOne()メソッドを使用して、 nameフィールドの値が"Sunrise Pizzeria"であるドキュメントを一致させます。 次に、最初に一致するドキュメントのboroughの値を"Queens"に、 cuisineの値を"Italian"に設定します。

upsertオプションがtrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、ドライバーはアップデート ドキュメントで指定されたフィールドと値を含む新しいドキュメントを挿入します。

val opts = UpdateOptions().upsert(true)
val filter = eq(Restaurant::name.name, "Sunrise Pizzeria")
val update = combine(
set(Restaurant::borough.name, "Queens"),
set(Restaurant::cuisine.name, "Italian")
)
collection.updateOne(filter, update, opts)

updateOne()メソッドとupdateMany()メソッドはそれぞれUpdateResultオブジェクトを返します。 UpdateResultインスタンスからの情報にアクセスするには、次のメソッドを使用できます。

プロパティ
説明

getMatchedCount()

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

getModifiedCount()

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

wasAcknowledged()

サーバーが結果を確認した場合は true を返します。

getUpsertedId()

ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントの _id 値を返します。

注意

wasAcknowledged()メソッドがfalseを返す場合、 UpdateResultインスタンスから他の情報にアクセスしようとすると、 InvalidOperation例外が発生します。 サーバーが書込み (write) 操作を確認しない場合、ドライバーはこれらの値を決定できません。

Kotlin Syncドライバーを使用してドキュメントを更新する方法を示す実行可能なコード例については、「 ドキュメントの挿入 」を参照してください。

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