Overview
このガイドでは、Kotlin Sync ドライバーを使用して、MongoDB 削除操作 を実行し、 コレクションからドキュメントを削除する方法を学習できます。
削除操作は、MongoDB コレクションから 1 つ以上のドキュメントを削除します。 削除操作は、 deleteOne()またはdeleteMany()メソッドを使用して実行できます。
サンプル データ
このガイドの例では、Atlas サンプル データセットの sample_restaurants.restaurants コレクションを使用します。無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。
このコレクション内のドキュメントは、次の Kotlin データ クラスによってモデル化されます。
data class Restaurant(val name: String, val borough: String)
削除操作
MongoDB では、次の方法で削除操作を実行できます。
deleteOne()は、検索条件に一致する最初のドキュメントを削除します。deleteMany()は、検索条件に一致するすべてのドキュメントを削除します
各削除メソッドにはクエリフィルタードキュメント が必要です。このドキュメントは、削除対象として選択するドキュメントを決定する検索条件を指定します。 クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
単一ドキュメントの削除
次の例では、 deleteOne()メソッドを使用して、 nameフィールドの値が"Happy Garden"であるドキュメントを削除します。
val filter = eq(Restaurant::name.name, "Happy Garden") val result = collection.deleteOne(filter)
複数のドキュメントの削除
次の例では、 deleteMany()メソッドを使用して、 boroughフィールドの値が"Brooklyn"で、かつnameフィールドの値が"Starbucks"であるすべてのドキュメントを削除します。
val filter = and( eq(Restaurant::borough.name, "Brooklyn"), eq(Restaurant::name.name, "Starbucks") ) val result = collection.deleteMany(filter)
削除操作をカスタマイズする
deleteOne()メソッドとdeleteMany()メソッドはオプションで、削除操作を構成するために使用できるオプションを表すDeleteOptionsパラメータを受け入れます。 オプションを指定しない場合、ドライバーはデフォルト設定で削除操作を実行します。
次の表では、 DeleteOptionsインスタンスを構成するために使用できる setter メソッドについて説明します。
方式 | 説明 |
|---|---|
| 結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。 |
| ドキュメントを照合するときに使用するインデックスを指定します。詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。 |
| ドキュメントを一致させるときに使用する string としてインデックスを指定します。詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。 |
| 操作の最上位変数を設定するためのパラメーター名と値のマップを提供します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
|
変更削除の例
次のコードでは、オプションを作成し、 comment()メソッドを使用して削除操作にコメントを追加します。 次に、この例ではdeleteMany()メソッドを使用して、 nameフィールドの値に string "Red"が含まれるrestaurantsコレクション内のすべてのドキュメントを削除します。
val opts = DeleteOptions().comment("sample comment") val filter = regex(Restaurant::name.name, "Red") val result = collection.deleteOne(filter, opts)
Tip
前述の例でdeleteMany()メソッドではなくdeleteOne()メソッドを使用すると、ドライバーはクエリフィルターに一致する最初のドキュメントのみを削除します。
戻り値
deleteOne()メソッドとdeleteMany()メソッドはそれぞれDeleteResultインスタンスを返します。 DeleteResultインスタンスから次の情報にアクセスできます。
deletedCountは、削除されたドキュメントの数を示しますwasAcknowledged()は、サーバーが結果を確認した場合にtrueを返します。
クエリフィルターがどのドキュメントにも一致しない場合、ドライバーはドキュメントを削除せず、 deletedCountの値は0です。
注意
wasAcknowledged()メソッドがfalseを返す場合、 deletedCountプロパティにアクセスしようとするとInvalidOperation例外が発生します。 サーバーが書込み (write) 操作を確認しない場合、ドライバーはこれらの値を決定できません。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。