Docs Menu
Docs Home
/ / /
Java Sync Driver
/

Delete Documents

このガイドでは、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コレクション内のすべてのドキュメントが表示されます。 顧客の混乱を減らすために、この店は在庫のない色を排除したいと考えています。

欠落している色を削除するには、 qty0である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 }

この店では、黄色の塗料の残りの量を提供しています。 つまり、黄色のqty0になり、コレクションから黄色を除く必要があります。

黄色を削除するには、 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ドキュメントを参照してください。

戻る

ドキュメントの置換

項目一覧