Overview
このガイドでは、 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()は、検索条件に一致するすべてのドキュメントを更新します
各更新方法には次のパラメーターが必要です。
クエリフィルター。アップデートするドキュメントに一致する。 クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
1 つのドキュメントの更新
次の例では、 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 メソッドについて説明します。
プロパティ | 説明 |
|---|---|
| クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。デフォルトは |
| 操作に適用するソート基準を設定します。 |
| アップデート操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは |
| 結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。 |
| アップデートを適用する配列要素を選択するために指定するフィルターのリストを提供します。 |
| ドキュメントをマッチングするときに使用するインデックスを設定します。 詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。 |
| 操作の最上位変数を設定するためのパラメーター名と値のマップを提供します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
|
ドキュメントをアップサートする例
次のコードでは、 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インスタンスからの情報にアクセスするには、次のメソッドを使用できます。
プロパティ | 説明 |
|---|---|
| アップデートが実行された回数に関係なく、クエリフィルターに一致したドキュメントの数を返します。 |
| 更新操作によって変更されたドキュメントの数を返します。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。 |
| サーバーが結果を確認した場合は |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントの |
注意
wasAcknowledged()メソッドがfalseを返す場合、 UpdateResultインスタンスから他の情報にアクセスしようとすると、 InvalidOperation例外が発生します。 サーバーが書込み (write) 操作を確認しない場合、ドライバーはこれらの値を決定できません。
詳細情報
Kotlin Syncドライバーを使用してドキュメントを更新する方法を示す実行可能なコード例については、「 ドキュメントの挿入 」を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。