Overview
このガイドでは、MongoDB Java ドライバーを使用してドキュメントを削除する方法を学習します。
クエリフィルターを deleteOne()
、 deleteMany()
、またはfindOneAndDelete()
メソッドにクエリフィルターを渡すことで、ドキュメントを削除できます。
deleteOne()
メソッドは 1 つのドキュメントを削除します。 クエリフィルターが複数のドキュメントに一致する場合、 メソッドはコレクション内の一致の最初の出現を削除します。
deleteMany()
メソッドは、クエリフィルターに一致するすべてのドキュメントを削除します。
findOneAndDelete()
メソッドは、コレクション内の一致の最初の出現をアトミックに検索して削除します。
照合を指定したり、インデックスをヒントにしたりするには、 メソッドとDeleteOptions
メソッドの 2 番目のパラメータとしてdeleteOne()
deleteMany()
を使用します。
照合を指定する、インデックスのヒント、ソート順序を指定する、または返されたドキュメントのプロジェクションを指定するには、 findOneAndDelete()
メソッドの 2 番目のパラメータとしてFindOneAndDeleteOptions
を使用します。
サンプル ドキュメント
次の例は、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 }
多数のドキュメントの削除
塗料店のウェブサイトには、 paint_inventory
コレクション内のすべてのドキュメントが表示されます。 顧客の混乱を減らすために、この店は在庫のない色を排除したいと考えています。
欠落している色を削除するには、 qty
が0
であるpaint_inventory
コレクションをクエリし、そのクエリをdeleteMany()
メソッドに渡します。
Bson 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()
メソッドに渡します。
Bson 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()
メソッドに渡します。
Bson filter = Filters.eq("color", "purple"); System.out.println(collection.findOneAndDelete(filter).toJson());
他の削除メソッドとは異なり、 findOneAndDelete()
は削除されたドキュメントを返します。
{ "_id": 2, "color": "purple", "qty": 8 }
注意
クエリフィルターに一致するものがない場合、ドキュメントは削除されず、メソッドはnull
を返します。
以下は、 paint_inventory
コレクションに残っているドキュメントを示しています。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
削除の例: 完全なファイル
注意
セットアップ例
この例では、接続 URI を使用してMongoDBのインスタンスに接続します。MongoDBインスタンスへの接続の詳細については、「 MongoClient の作成ガイド 」を参照してください。この例では、 Atlasサンプルデータセット に含まれる sample_mflix
データベースの movies
コレクションも使用します。「Atlas を使い始める」ガイドに従って、 MongoDB Atlasの無料階層のデータベースにロードできます。
次のコードは、1 つの削除操作と複数の削除操作を実行する完全なスタンドアロンファイルです。
// Deletes documents from a collection by using the Java driver package org.example; import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; import static com.mongodb.client.model.Filters.lt; public class Delete { public static void main(String[] args) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Bson deleteOneQuery = eq("title", "The Garbage Pail Kids Movie"); // Deletes the first document that has a "title" value of "The Garbage Pail Kids Movie" DeleteResult result = collection.deleteOne(deleteOneQuery); System.out.println("Deleted document count - delete one: " + result.getDeletedCount()); Bson deleteManyQuery = lt("imdb.rating", 1.9); // Deletes all documents that have an "imdb.rating" value less than 1.9 result = collection.deleteMany(deleteManyQuery); // Prints the number of deleted documents System.out.println("Deleted document count - delete many: " + result.getDeletedCount()); } } }
Deleted document count - query for one: 1 Deleted document count - unlimited query: 4
これらの例のクエリでは、eq()
フィルターと lt()
フィルターを使用してドキュメントをクエリします。 フィルターの詳細については、フィルター クラス APIドキュメントを参照してください。
詳細情報
API ドキュメント
ドキュメントを削除するために使用されるメソッドとクラスの詳細については、次のAPIドキュメントを参照してください。