Spring Core

Spring Data MongoDB : Delete document

In this tutorial we will discuss about the deleting the document from mongoDB. Document is same as a row in the table of relational database. In the our example we will fire deleting a document from “dojCollection” of “dineshonjavaDB”.

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

output:
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

                             <<previous<<             || index  ||         >>next>>

 

Previous
Next
Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

2 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

2 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

2 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

2 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

2 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

3 years ago