Delete Documents
Overview
このガイドでは、MongoDB Kotlin ドライバーを使用してドキュメントを削除する方法を学習できます。
クエリフィルターを deleteOne()
、 deleteMany()
、またはfindOneAndDelete()
メソッドにクエリフィルターを渡すことで、ドキュメントを削除できます。
deleteOne()
メソッドは 1 つのドキュメントを削除します。 クエリフィルターが複数のドキュメントに一致する場合、 メソッドはコレクション内の一致の最初の出現を削除します。
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 }
ドキュメントの削除
この店では、黄色の塗料の残りの量を提供しています。 つまり、黄色の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 }
ドキュメントの検索と削除
この店では、赤色の塗料の残りの量をラッパー処理して、 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() サーバー マニュアル エントリ