Methods for removing documents-
You can use several overloaded methods to remove an object from the database.
- remove Remove the given document based on one of the following: a specific object instance, a query document criteria combined with a class or a query document criteria combined with a specific collection name.
To see the more about the deleting plesse click on MongoDB Deleting a Document to Database
In Spring data for MongoDB, you can use remove() and findAndRemove() to delete document from mongoDB.
Employee employee = new Employee(); //delete employee object, under entity collection ("dojCollection") mongoOperation.remove(employee); //delete where empId = 10002, under "dojCollection" collection mongoOperation.remove(new Query(Criteria.where("empId").is(10002)),"dojCollection"); //delete where empId = 10003, under "dojCollection" collection //and return the deleted employee object Employee deletedEmployee = mongoOperation.findAndRemove(new Query(Criteria.where("empId").is(10003)), Employee.class,"dojCollection");
Note:
1. The findAndRemove() method will delete the matched record and return the deleted records.
2. Be careful about the remove() method, if Query parameter failed to match any of the records, it will caused null pointer exception.
See the full example to query a document from the “dojCollection” of the “dineshonjavaDB”
Step 1: Creating the domain class Employee
Employee.java
package com.dineshonjava.mongo.dto; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; /** * @author Dinesh Rajput * */ @Document public class Employee { @Id private int empId; private String empName; private long salary; private int empAge; public int getEmpId() { return empId; } public void setEmpId(int empId) { this.empId = empId; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public long getSalary() { return salary; } public void setSalary(long salary) { this.salary = salary; } public int getEmpAge() { return empAge; } public void setEmpAge(int empAge) { this.empAge = empAge; } @Override public String toString() { return "Employee [age=" + empAge + ", empName=" + empName + ", empId=" + empId + ", salary=" + salary + "]"; } }
Step 2: Creating configuration file
mongo-config.xml
<beans xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"> <!-- Default bean name is 'mongo' --> <mongo:mongo host="localhost" port="27017"/> <!-- Default bean name is 'mongo' --> <mongo:mongo> <mongo:options connections-per-host="100" threads-allowed-to-block-for-connection-multiplier="5" max-wait-time="120000000" connect-timeout="10000000" socket-keep-alive="true" socket-timeout="15000000" auto-connect-retry="true"/> </mongo:mongo> <context:annotation-config/> <context:component-scan base-package="com.dineshonjava.mongo"> <context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration"/> </context:component-scan> <!-- Offers convenience methods and automatic mapping between MongoDB JSON documents and your domain classes. --> <bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value="dineshonjavaDB"/> </bean>
Step 3: Creating Class which inserting the document into the mongoDB.
HelloMongoDB.java
package com.dineshonjava.mongo.main; import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Query.query; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import com.dineshonjava.mongo.dto.Employee; /** * @author Dinesh Rajput * */ @Repository public class HelloMongoDB { @Autowired MongoOperations mongoOperations; public void execute() { if (mongoOperations.collectionExists("dojCollection")) { mongoOperations.dropCollection("dojCollection"); } Employee employee3 = new Employee(); employee3.setEmpId(1001); employee3.setEmpName("Dinesh Rajput"); employee3.setSalary(70000); employee3.setEmpAge(26); Employee employee4 = new Employee(); employee4.setEmpId(1002); employee4.setEmpName("Adesh Rajput"); employee4.setSalary(30000); employee4.setEmpAge(23); Employee employee5 = new Employee(); employee5.setEmpId(1003); employee5.setEmpName("Vinesh Rajput"); employee5.setSalary(32000); employee5.setEmpAge(23); Employee employee6 = new Employee(); employee6.setEmpId(1004); employee6.setEmpName("Sweety Rajput"); employee6.setSalary(50000); employee6.setEmpAge(22); List<Employee> empList = new ArrayList<Employee>(); empList.add(employee3); empList.add(employee4); empList.add(employee5); empList.add(employee6); mongoOperations.insert(empList, "dojCollection"); System.out.println("***********************CASE 1************************"); // Case 1 ...delete where empId = 1001 // delete mongoOperations.remove(query(where("empId").is(1001)), "dojCollection"); System.out.println("deleted"); System.out.println("***********************CASE 2**findAndRemove User*********************"); // Case 2 ... delete where empId = 10002, and returns the deleted record // find Employee employee2 = mongoOperations.findAndRemove(query(where("empId").is(1002)), Employee.class,"dojCollection"); System.out.println(employee2); } }
Step 4: Running the Example
Following code shows how to run this example
HelloMongoTestApp.java
package com.dineshonjava.mongo.main; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh Rajput * */ public class HelloMongoTestApp { /** * @param args */ public static void main(String[] args) { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("mongo-config.xml"); HelloMongoDB hello = (HelloMongoDB) context.getBean("helloMongoDB"); hello.execute(); System.out.println( "DONE!" ); } }
If everything is fine then run the above main application as Java Application we will get the following
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
***********************CASE 1************************
deleted
***********************CASE 2**findAndRemove User*********************
Employee [age=23, empName=Adesh Rajput, empId=1002, salary=30000]
DONE!
Download SourceCode+Libs
MongoDBSpringDeleteDemo.zip
References
MongoDB template query documentation