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
   }

}
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号