Spring Data MongoDB 教程

删除文档的方法

在 Spring Data MongoDB 中,你可以使用下面五种重载方法中的任意一个方法实现从数据库中删除文档:

(1)从 GOT 集合中删除由其 _id 指定的单个文档:

template.remove(tywin, "GOT");

(2)从 GOT 集合中删除符合查询条件的所有文档:

template.remove(query(where("lastname").is("lannister")), "GOT");

(3)删除 GOT 集合中的前三个文档。与(2)不同,要删除的文档由其 id 标识,运行给定的查询,首先应用排序(sort)、限制(limit)和跳过(skip)选项,然后在单独的步骤中一次性删除所有文档:

template.remove(new Query().limit(3), "GOT");

(4)从 GOT 集合中删除所有符合查询条件的文档。与(3)不同的是,文档不会在批处理中删除,而是逐个删除:

template.findAllAndRemove(query(where("lastname").is("lannister"), "GOT");

(5)删除 GOT 集合中的前三个文档。与(3)不同的是,文档不会在批处理中删除,而是逐个删除:

template.findAllAndRemove(new Query().limit(3), "GOT");

示例

本示例将演示上面五种删除方法的用法,代码如下:

package com.hxstrive.springdata.mongodb;

import com.hxstrive.springdata.mongodb.entity.Person;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import java.util.Arrays;
import java.util.List;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;

@SpringBootTest
public class RemoveDocumentTest {

   @Autowired
   private MongoTemplate mongoTemplate;

   @BeforeEach
   public void init() {
       // 删除集合
       mongoTemplate.dropCollection(Person.class);

       // 准备数据
       mongoTemplate.insert(Person.builder().id("1").name("Bill").age(26).build());
       mongoTemplate.insert(Person.builder().id("2").name("Helen").age(29).build());
       mongoTemplate.insert(Person.builder().id("3").name("Tom").age(32).build());
       mongoTemplate.insert(Person.builder().id("4").name("Joe").age(38).build());
       mongoTemplate.insert(Person.builder().id("5").name("Lucen").age(44).build());
   }

   @Test
   public void removeOne() {
       Query query = query(where("id").is("1"));

       Person person = mongoTemplate.findOne(query, Person.class);
       if(null != person) {
           // 删除指定对象
           mongoTemplate.remove(person, "person");
       }

       long count = mongoTemplate.count(query, "person");
       System.out.println("count = " + count); // count = 0
   }

   @Test
   public void removeAll() {
       Query query = query(where("age").gte(30));
       long count = mongoTemplate.count(query, "person");
       System.out.println("删除前,count=" + count); // 删除前,count=3

       // 删除所有匹配的文档
       mongoTemplate.remove(query, "person");

       count = mongoTemplate.count(query, "person");
       System.out.println("删除后,count=" + count); // 删除后,count=0
   }


   @Test
   public void removeLimit() {
       Query query = query(where("age").gte(30));
       long count = mongoTemplate.count(query, "person");
       System.out.println("删除前,count=" + count); // 删除前,count=3

       // 删除前两个文档
       mongoTemplate.remove(query.limit(2), "person");

       count = mongoTemplate.count(query, "person");
       System.out.println("删除后,count=" + count); // 删除后,count=1
   }

   @Test
   public void findAllAndRemoveAll() {
       Query query = query(where("age").gte(30));
       long count = mongoTemplate.count(query, "person");
       System.out.println("删除前,count=" + count); // 删除前,count=3

       // 删除所有匹配的文档
       List<Person> list = mongoTemplate.findAllAndRemove(query, "person");
       System.out.println("删除的数据:" + Arrays.toString(list.toArray()));
       // 删除的数据:[Person(id=3, name=Tom, age=32), Person(id=4, name=Joe, age=38), Person(id=5, name=Lucen, age=44)]

       count = mongoTemplate.count(query, "person");
       System.out.println("删除后,count=" + count); // 删除后,count=0
   }

   @Test
   public void findAllAndRemoveLimit() {
       Query query = query(where("age").gte(30));
       long count = mongoTemplate.count(query, "person");
       System.out.println("删除前,count=" + count); // 删除前,count=3

       // 删除前两个文档
       List<Person> list = mongoTemplate.findAllAndRemove(query.limit(2), "person");
       System.out.println("删除的数据:" + Arrays.toString(list.toArray()));
       // 删除的数据:[Person(id=3, name=Tom, age=32), Person(id=4, name=Joe, age=38)]

       count = mongoTemplate.count(query, "person");
       System.out.println("删除后,count=" + count); // 删除后,count=1
   }

}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号