Overview
このガイドでは、MongoDB Kotlin ドライバーを使用してドキュメントを削除する方法を学習できます。
クエリフィルターをdeleteOne()、deleteMany()、または findOneAndDelete() メソッドに渡すことで、ドキュメントを削除できます。
deleteOne()メソッド: 単一のドキュメントを削除します。クエリフィルターが複数のドキュメントに一致する場合、 メソッドはコレクション内の一致の最初の出現を削除します 。deleteMany()メソッド:クエリフィルターに一致するすべてのドキュメントを削除します。findOneAndDelete()メソッド:コレクション内の一致の最初の出現を検索して削除します。一致したドキュメントを返します。
照合を指定したり、インデックスをヒントにしたりするには、 メソッドとDeleteOptions メソッドの 2 番目のパラメータとしてdeleteOne() deleteMany()を使用します。
照合を指定する、インデックスのヒント、ソート順序を指定する、または返されたドキュメントのプロジェクションを指定するには、 findOneAndDelete()メソッドの 2 番目のパラメータとしてFindOneAndDeleteOptionsを使用します。
Tip
単一ドキュメントを削除する場合は、 _idなどの一意のインデックスでクエリをフィルタリングして、クエリが削除するドキュメントと一致していることを確認します。
サンプル ドキュメント
次の例は、8 色の塗料を販売する塗料店です。 この店では毎年恒例のオンラインセールが行われ、 paint_inventoryコレクションに次のドキュメントが生成されました。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 3, "color": "blue", "qty": 0 } { "_id": 4, "color": "white", "qty": 0 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 6, "color": "pink", "qty": 0 } { "_id": 7, "color": "green", "qty": 0 } { "_id": 8, "color": "black", "qty": 8 }
このデータは、次の Kotlin データ クラスでモデル化されます。
data class PaintOrder( val id: Int, val qty: Int, val color: String )
多数のドキュメントの削除
塗料店のウェブサイトには、 paint_inventoryコレクション内のすべてのドキュメントが表示されます。 顧客の混乱を減らすために、この店は在庫のない色を排除したいと考えています。
欠落している色を削除するには、 qtyが0であるpaint_inventoryコレクションをクエリし、そのクエリをdeleteMany()メソッドに渡します。
val filter = Filters.eq("qty", 0) collection.deleteMany(filter)
以下は、 paint_inventoryコレクションに残っているドキュメントを示しています。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 8, "color": "black", "qty": 8 }
deleteMany() の例: 完全なファイル
注意
セットアップ例
この例では、接続 URI を使用してMongoDBのインスタンスに接続します。MongoDBインスタンスへの接続の詳細については、「MongoDBへの接続ガイド」を参照してください。この例では、movies sample_mflixAtlasサンプルデータセットに含まれる データベースの コレクションも使用します。MongoDB Atlasの無料階層のデータベースにロードするには、MongoDB Get Started ガイドを参照してください。
次の例は、imdb サブドキュメント内の 2.9 より小さい rating を含む moviesコレクション内のすべてのドキュメントを検索して削除する完全に実行可能なファイルです。
import com.mongodb.MongoException import com.mongodb.client.model.Filters import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val imdb: IMDB){ data class IMDB(val rating: Double) } fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") val query = Filters.lt("${Movie::imdb.name}.${Movie.IMDB::rating.name}", 2.9) try { val result = collection.deleteMany(query) println("Deleted document count: " + result.deletedCount) } catch (e: MongoException) { System.err.println("Unable to delete due to an error: $e") } mongoClient.close() }
Deleted document count: 4
ドキュメントの削除
この店では、黄色の塗料の残りの量を提供しています。 つまり、黄色のqtyは0になり、コレクションから黄色を除く必要があります。
黄色を削除するには、 colorが"yellow"であるpaint_inventoryコレクションをクエリし、そのクエリをdeleteOne()メソッドに渡します。
val filter = Filters.eq("color", "yellow") collection.deleteOne(filter)
以下は、 paint_inventoryコレクションに残っているドキュメントを示しています。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 8, "color": "black", "qty": 8 }
deleteOne() の例: 完全なファイル
注意
セットアップ例
この例では、接続 URI を使用してMongoDBのインスタンスに接続します。MongoDBインスタンスへの接続の詳細については、 MongoDBへの接続ガイドを参照してください。この例では、Atlasサンプルデータセットに含まれる sample_mflixデータベースの moviesコレクションも使用します。MongoDB Atlasの無料階層のデータベースにロードするには、 MongoDB Get Startedガイドを参照してください。
次の例は、次のアクションを実行する完全に実行可能なファイルです。
eq()フィルターを使用して、titleがテキスト'The Garbage Pail Kids Movie'と完全に一致する映画を見つけます。一致する 1 つのドキュメントを
moviesコレクションから削除します。
import com.mongodb.MongoException import com.mongodb.client.model.Filters import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val title: String) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") val query = Filters.eq(Movie::title.name, "The Garbage Pail Kids Movie") try { val result = collection.deleteOne(query) println("Deleted document count: " + result.deletedCount) } catch (e: MongoException) { System.err.println("Unable to delete due to an error: $e") } mongoClient.close() }
例を実行する際、deleteOne() への呼び出しで渡したクエリフィルターがドキュメントと一致して削除されると、次のような出力が表示されます。
Deleted document count: 1
クエリフィルターがコレクション内のドキュメントと一致しない場合、 deleteOne()を呼び出すとドキュメントは削除されず、次の結果が返されます。
Deleted document count: 0
ドキュメントの検索と削除
この店では、赤色の塗料の残りの量をラッパー処理して、 paint_inventoryコレクションから赤色を削除したいと考えています。
色を選択するには、 colorが"purple"であるpaint_inventoryコレクションをクエリし、そのクエリをfindOneAndDelete()メソッドに渡します。 他の削除メソッドとは異なり、 findOneAndDelete()は削除されたドキュメントを返します。
val filter = Filters.eq("color", "purple") val result = collection.findOneAndDelete(filter) println("The following was deleted: $result")
The following was deleted: PaintOrder(id=2, qty=8, color=purple)
注意
クエリフィルターに一致するものがない場合、ドキュメントは削除されず、メソッドはnullを返します。
以下は、 paint_inventoryコレクションに残っているドキュメントを示しています。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
このガイドで言及されているメソッドとクラスの詳細については、次のリソースを参照してください。
deleteOne() APIドキュメント
deleteMany() APIドキュメント
findOneAndDelete() APIドキュメント
DeleteOptions APIドキュメント
FindOneAndDeleteOptions APIドキュメント
db.collection.deleteOne() サーバー マニュアル エントリ
db.collection.deleteMany() サーバー マニュアル エントリ
db.collection.findOneAndDelete() サーバー マニュアル エントリ