In this tutorial, we show you how to use collection.remove() to delete documents from the collection.

1. Test Data

Insert 10 documents from number 1 to 10 for testing.

for (int i=1; i <= 10; i++) {
    collection.insert(new BasicDBObject().append("number", i));
}

2. DBCollection.remove()

See below code snippets to delete documents.

Example 1

Get first document and delete it. In this case, number = 1 is deleted.

	DBObject doc = collection.findOne(); //get first document
	collection.remove(doc);
Example 2

Puts query in a BasicDBObject. In this case, number = 2 is deleted.

	BasicDBObject document = new BasicDBObject();
	document.put("number", 2);
	collection.remove(document);
And Operator?

Two common mistakes :

1. A query like this only delete number = 3.

	BasicDBObject document = new BasicDBObject();
	document.put("number", 2);
        document.put("number", 3); //override above value 2
	collection.remove(document);

2. Nice try below, but query like this will not work, it will delete NOTHING.

	BasicDBObject document = new BasicDBObject();
	List<Integer> list = new ArrayList<Integer>();
	list.add(7);
	list.add(8);
	document.put("number", list);
	collection.remove(document);

For “AND” query, you need to use “$in” or “$and” operator, see example 5.

Example 3

Use BasicDBObject directly. In this case, number = 3 is deleted.

	collection.remove(new BasicDBObject().append("number", 3));
Example 4

Puts a $gt operator in a BasicDBObject object. In this case, number = 10 is deleted.

	BasicDBObject query = new BasicDBObject();
	query.put("number", new BasicDBObject("$gt", 9));
	collection.remove(query);
Example 5

Puts a $in operator in a BasicDBObject object, constructs the query in ArrayList. In this case, number = 4 and number = 5 are deleted.

	BasicDBObject query2 = new BasicDBObject();
	List<Integer> list = new ArrayList<Integer>();
	list.add(4);
	list.add(5);
	query2.put("number", new BasicDBObject("$in", list));
	collection.remove(query2);
More MongoDB Operators
For more operators, read this MongoDB operators quick reference.
Example 6

Use cursor to delete all available documents. (Not recommended, prefer example 7)

	DBCursor cursor = collection.find();
	while (cursor.hasNext()) {
		collection.remove(cursor.next());
	}
Example 7

Pass an empty BasicDBObject, and the entire documents will be deleted.

	collection.remove(new BasicDBObject());
Example 8

It deletes the entire documents and drop the collection.

	collection.drop();
Example 9

The remove() will returns a WrireResult object, it contains useful information about the remove operation. And you can uses getN() to get the number of documents affected.

       WriteResult result = collection.remove(query2);
       System.out.println("Number of documents are deleted : " + result.getN());

3. Full Example

Full example to show the different ways to delete documents.

package com.mkyong.core;
 
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
 
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
 
/**
 * Java MongoDB : Delete document
 * @author mkyong
 */
 
public class App {
    public static void main(String[] args) {
 
      try {
 
	Mongo mongo = new Mongo("localhost", 27017);
	DB db = mongo.getDB("yourdb");
 
	// get a single collection
	DBCollection collection = db.getCollection("dummyColl");
 
	//insert number 1 to 10 for testing
	for (int i=1; i <= 10; i++) {
		collection.insert(new BasicDBObject().append("number", i));
	}
 
	//remove number = 1
	DBObject doc = collection.findOne(); //get first document
	collection.remove(doc);
 
	//remove number = 2
	BasicDBObject document = new BasicDBObject();
	document.put("number", 2);
	collection.remove(document);
 
	//remove number = 3
	collection.remove(new BasicDBObject().append("number", 3));
 
	//remove number > 9 , means delete number = 10
	BasicDBObject query = new BasicDBObject();
	query.put("number", new BasicDBObject("$gt", 9));
	collection.remove(query);
 
	//remove number = 4 and 5
	BasicDBObject query2 = new BasicDBObject();
	List<Integer> list = new ArrayList<Integer>();
	list.add(4);
	list.add(5);
	query2.put("number", new BasicDBObject("$in", list));
	collection.remove(query2);
 
	//print out the document
	DBCursor cursor = collection.find();
        while(cursor.hasNext()) {
             System.out.println(cursor.next());
        }
 
        collection.drop();
 
        System.out.println("Done");
 
      } catch (UnknownHostException e) {
	e.printStackTrace();
      } catch (MongoException e) {
	e.printStackTrace();
      }
 
   }
}

Output…

{ "_id" : { "$oid" : "4dc7a6989e3a66c5faeee757"} , "number" : 6}
{ "_id" : { "$oid" : "4dc7a6989e3a66c5faeee758"} , "number" : 7}
{ "_id" : { "$oid" : "4dc7a6989e3a66c5faeee759"} , "number" : 8}
{ "_id" : { "$oid" : "4dc7a6989e3a66c5faeee75a"} , "number" : 9}
Done

References

  1. MongoDB operators quick reference
  2. MongoDB WriteResult JavaDoc
Tags :
< PreviousNext >
Java MongoDB : Query documentIndexJava MongoDB : Save image example
Founder of Mkyong.com and HostingCompass.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider making a donation to this charity, thanks.

Related Posts

Popular Posts