Overview
In this guide, you can learn how to remove documents with the MongoDB Java driver.
You can remove documents by passing a query filter to the
deleteOne(), deleteMany() or findOneAndDelete() methods.
The deleteOne() method deletes a single document. If the query
filter matches more than one document, the method will remove the first
occurrence of a match in the collection.
The deleteMany() method deletes all documents that match the query
filter.
The findOneAndDelete() method atomically finds and deletes the first
occurrence of a match in the collection.
To specify a collation or hint an index, use DeleteOptions
as a second parameter to the deleteOne() and deleteMany() methods.
To specify a collation, hint an index, specify sort order, or specify a
projection on the returned document, use FindOneAndDeleteOptions
as the second parameter to the findOneAndDelete() method.
Sample Documents
The following examples are about a paint store that sells eight different
colors of paint. The store had their annual online sale resulting in the
following documents in their paint_inventory collection:
{ "_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 }
Delete Many Documents
The paint store website displays all documents in the
paint_inventory collection. To reduce customer confusion, the store
wants to remove the colors that are out of stock.
To remove the out of stock colors, query the paint_inventory
collection where the qty is 0 and pass the query to the
deleteMany() method:
Bson filter = Filters.eq("qty", 0); collection.deleteMany(filter);
The following shows the documents remaining in the paint_inventory
collection:
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 5, "color": "yellow", "qty": 6 } { "_id": 8, "color": "black", "qty": 8 }
Delete a Document
The store is donating the remaining quantity of their yellow paint. This
means that the qty for yellow is now 0 and we need to remove yellow
from the collection.
To remove yellow, query the paint_inventory collection where the
color is "yellow" and pass the query to the deleteOne()
method:
Bson filter = Filters.eq("color", "yellow"); collection.deleteOne(filter);
The following shows the documents remaining in the paint_inventory
collection:
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 8, "color": "black", "qty": 8 }
Find and Delete a Document
The store would like to raffle the remaining quantity of purple paint
and remove purple from the paint_inventory collection.
To pick a color, query the paint_inventory collection where the
color is "purple" and pass the query to the findOneAndDelete()
method:
Bson filter = Filters.eq("color", "purple"); System.out.println(collection.findOneAndDelete(filter).toJson());
Unlike the other delete methods, findOneAndDelete() returns the
deleted document:
{ "_id": 2, "color": "purple", "qty": 8 }
Note
If there are no matches to your query filter, no document gets
deleted and the method returns null.
The following shows the documents remaining in the paint_inventory
collection:
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
For more information about the methods and classes mentioned in this guide, see the following resources:
deleteOne() API Documentation
deleteMany() API Documentation
findOneAndDelete() API Documentation
DeleteOptions API Documentation
FindOneAndDeleteOptions API Documentation
db.collection.deleteOne() Server Manual Entry
db.collection.deleteMany() Server Manual Entry
db.collection.findOneAndDelete() Server Manual Entry