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 コレクションも使用します。MongoDB の開始方法に従って、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()); } }}これらの例のクエリでは、eq() フィルターと lt() フィルターを使用してドキュメントをクエリします。 フィルターの詳細については、フィルター クラスAPIドキュメントを参照してください。
詳細情報
API ドキュメント
ドキュメントを削除するために使用されるメソッドとクラスの詳細については、次のAPIドキュメントを参照してください。