SpringBoot整合MongoDB(从安装到使用系统化展示)

SpringBoot整合MongoDB(从安装到使用系统化展示)

在这里插入图片描述

MongoDB介绍

基础介绍

MongoDB是一种开源、面向文档的非关系型数据库管理系统(NoSQL DBMS),它以其灵活性、可扩展性和强大的查询能力而闻名。MongoDB的设计理念是为了满足现代应用中海量数据、高可用性和复杂数据模型的需求。以下是MongoDB的一些重要特点和概念:

  1. 文档数据库:MongoDB使用文档(Document)来表示数据,文档类似于JSON格式的数据结构,可以包含各种类型的数据,如字符串、数字、日期、数组和嵌套文档等。
  2. 面向文档:MongoDB是一种面向文档的数据库,每个文档都有一个唯一的标识符(通常称为_id),用于唯一标识文档。
  3. 高可扩展性:MongoDB支持水平扩展,可以通过分片(Sharding)将数据分布到多台服务器上,以实现更高的存储容量和性能。
  4. 动态模式:MongoDB不需要严格的表结构定义,文档可以自由添加和修改字段,适应数据模式的变化。
  5. 强大的查询语言:MongoDB支持丰富的查询语言,可以进行复杂的查询操作,包括过滤、排序、投影、聚合等。
  6. 索引支持:MongoDB支持各种类型的索引,包括单字段索引、复合索引、文本索引、地理空间索引等,以加速查询操作。
  7. 复制和高可用性:MongoDB支持数据的复制和自动故障转移,确保数据的高可用性和冗余。
  8. 数据存储:MongoDB将数据存储在集合(Collection)中,每个集合包含一组文档。集合类似于关系型数据库中的表格。
  9. Aggregation框架:MongoDB提供了强大的聚合框架,允许开发者执行复杂的数据聚合和转换操作。

需要注意的是,MongoDB的学习和使用可能需要一些时间和经验,特别是在涉及到高可用性、安全性和性能优化等方面。建议查阅MongoDB的官方文档以及相关教程,以获取更详细的指导和信息。

使用场景

同时,大家使用MongoDB数据库的时候,需要理清楚自己想要用来干什么,想要实现什么样的效果,这里我们也做一个举例:

MongoDB 在许多不同的场景中都可以发挥重要作用,特别是在需要处理半结构化数据和需要灵活性的应用中。以下是一些适合使用 MongoDB 的常见场景:

  1. 大数据存储和分析: MongoDB适合存储大量的非结构化或半结构化数据,如日志数据、社交媒体数据、传感器数据等。其灵活的模式和横向扩展能力使其成为大数据存储和分析的有力工具。

  2. 实时分析: MongoDB的聚合框架和强大的查询功能使其成为实时数据分析的良好选择。您可以快速进行数据的聚合、过滤和变换,以支持实时分析需求。

  3. 内容管理系统(CMS): MongoDB可以用于构建内容管理系统,特别是对于需要处理不同类型的内容、多媒体资源以及协同编辑的平台。

  4. 物联网(IoT)应用: MongoDB可以轻松处理来自多个传感器和设备的实时数据,支持物联网应用的数据存储和查询需求。

  5. 移动应用: MongoDB适用于移动应用,因为它支持灵活的数据模型和可以随着应用需求变化的数据结构。

  6. 实时数据存储: MongoDB可以存储实时应用产生的数据,如实时分析、即时通讯和实时监控等。

  7. 社交网络: MongoDB能够有效地处理社交媒体平台的用户数据、帖子、评论、关系等。

  8. 日志和事件追踪: MongoDB可以存储日志和事件数据,并支持查询和分析,以便监控和故障排除。

  9. 可扩展性要求: MongoDB的横向扩展能力使其能够轻松处理大规模的数据和负载,适合需要高可扩展性的应用。

    再通俗一点,我们可以结合身边举例

    以下列出了一些可以使用MongoDB作为数据存储的场景,但是并不是必须使用MongoDB的场景:

    • 淘宝用户数据
      • 存储位置:数据库
      • 特征:永久性存储,修改频度极低
    • 游戏装备数据、游戏道具数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合、修改频度较高
    • 直播数据、打赏数据、粉丝数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合,修改频度极高
    • 物联网数据
      • 存储位置:Mongodb
      • 特征:临时存储,修改频度飞速

    我之所以接触MongoDB数据存储,就是因为要将聊天记录存库,同时,还要实现可查询,可检索,于是就尝试使用了该数据库!当初自己对于这个数据库的概念尚且停留在MySQL的印象中,后来发现完全两回事,所以大家不要将MySQL数据库的属性映射到MongoDB数据库!!!

MongoDB安装

安装包形式安装

当您在 CentOS 上使用tar包安装 MongoDB的时候, 需要将其添加到系统的 PATH 环境变量中时,可以通过以下步骤来进行安装、配置和设置环境变量:

  1. 下载并解压 MongoDB:
    首先,从 MongoDB 的官方网站下载适用于您的操作系统和架构的压缩包。您可以使用 wget 命令来下载:

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.4.0.tgz
    

    也可以直接去官网进行下载,然后上传

    image-20230821210055108

    然后解压下载的压缩包:

    tar -zxvf mongodb-linux-x86_64-4.4.0.tgz
    
  2. 移动 MongoDB 文件夹:
    将解压后的 MongoDB 文件夹移动到适当的位置,例如 /opt 目录:

    sudo mv mongodb-linux-x86_64-4.4.0 /opt/mongodb
    
  3. 创建数据和日志目录:
    创建用于存储 MongoDB 数据和日志的目录:

    sudo mkdir -p /data/db
    sudo mkdir -p /var/log/mongodb
    
  4. 配置环境变量:
    打开 /etc/profile 文件以编辑系统级环境变量配置:

    sudo vi /etc/profile
    

    在文件末尾添加以下行,将 MongoDB 的可执行文件路径添加到 PATH 环境变量:

    export PATH=/opt/mongodb/bin:$PATH
    

    保存并退出编辑器。

  5. 使环境变量生效:
    使环境变量更改生效,使其在新终端会话中可用:

    source /etc/profile
    
  6. 启动 MongoDB 服务:
    启动 MongoDB 服务器,并指定数据目录和日志路径:

    mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork
    

    可选:您还可以将 MongoDB 配置为在系统启动时自动启动:

    sudo systemctl enable mongod
    
  7. 验证 MongoDB 安装:
    运行 MongoDB Shell 来验证安装是否成功:

    mongo
    

docker形式安装

要在Docker中安装MongoDB,您可以遵循以下步骤:

  1. 首先,确保您已经安装了Docker。如果没有安装,您可以从Docker官方网站下载并安装Docker:

    https://www.docker.com/get-started

    image-20230821203948326

  2. 打开终端(或命令行界面)。

  3. 使用以下命令在Docker中拉取MongoDB的官方镜像:

docker pull mongo

image-20230821204525928

  1. 创建并运行MongoDB容器。以下命令将创建一个名为"my-mongodb"的MongoDB容器,并将其绑定到主机的27017端口。您可以根据需要更改容器名称和端口绑定:
docker run --name my-mongodb -p 27017:27017 -d mongo
  1. MongoDB容器已经在后台运行。您可以使用以下命令查看正在运行的容器:
docker ps

image-20230821204942397

  1. 要连接到MongoDB容器的Mongo shell,您可以使用以下命令:
docker exec -it my-mongodb mongo

这将使您进入Mongo shell,可以在其中执行MongoDB命令。

  1. 要停止并删除MongoDB容器,可以使用以下命令:
docker stop my-mongodb
docker rm my-mongodb

这将停止并删除名为"my-mongodb"的容器。

MongoDB远程连接

请注意,不要占用了了27017端口,否则可能导致安装失败,同时,远程连接要注意防火墙的状态,要么关闭防火墙,要么放行27017端口。

在 CentOS 操作系统中,要放行端口 27017(MongoDB 默认的端口),您需要配置防火墙规则,以允许来自外部网络的连接到达该端口。以下是在 CentOS 上放行端口 27017 的步骤:

  1. 检查防火墙状态

    首先,检查防火墙的状态,确保防火墙是活动的。您可以使用以下命令来检查防火墙状态:

    sudo firewall-cmd --state
    
  2. 添加防火墙规则

    如果防火墙处于活动状态,您可以使用以下命令添加一个允许端口 27017 的防火墙规则:

    sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
    

    解释:

    • --zone=public:指定要添加规则的防火墙区域。
    • --add-port=27017/tcp:添加端口 27017 的 TCP 规则。
    • --permanent:将规则永久保存,以便在重启后仍然生效。
  3. 重新加载防火墙规则

    添加规则后,需要重新加载防火墙规则才能使更改生效:

    sudo firewall-cmd --reload
    
  4. 验证规则

    您可以使用以下命令查看已添加的防火墙规则:

    sudo firewall-cmd --list-all
    

    确保在输出中看到包含 ports: 27017/tcp,表示端口 27017 已被允许。

现在,您已经在 CentOS 上成功放行了端口 27017,允许外部网络连接到 MongoDB。下面我们就可以是Navicat进行连接测试!

image-20230821205328295

MongoDB基础语法

创建数据库

image-20230821211104284

创建数据表

在 MongoDB 中,数据存储在集合(Collections)中,而不是传统的数据表。每个集合可以包含多个文档(Documents),文档类似于数据库中的行。下面是一个示例,展示如何使用 MongoDB 语法创建一个名为 “Books” 的集合,并插入一个文档:

// 连接到 MongoDB 数据库
use my_db// 创建 "Books" 集合并插入一个文档
db.Books.insertOne({title: "如何使用MongoDB",author: "IT小辉同学",year: 2023
})

image-20230821211514158

让我解释一下上述语法的每个部分:

  1. use my_db:这将切换到数据库 “my_db”。如果该数据库不存在,MongoDB 会自动创建它。

  2. db.Books.insertOne({ ... }):这将在当前数据库中的 “Books” 集合中插入一个文档。您可以将需要插入的数据作为一个 JSON 对象传递给 insertOne 方法。

在上面的示例中,我们创建了一个名为 “Books” 的集合,并向其中插入了一个文档,该文档包含 “title”、“author” 和 “year” 三个字段。

插入数据

单条插入

// 插入一条数据到 "Books" 集合
db.Books.insertOne({title: "如何使用MongoDB",author: "IT小辉同学",year: 2023
})

多条插入

// 插入十条数据到 "Books" 集合
db.Books.insertMany([{ title: "平凡的世界", author: "路遥", year: 1986 },{ title: "呐喊", author: "鲁迅", year: 1923 },{ title: "朝花夕拾", author: "鲁迅", year: 1928 },{ title: "李自成", author: "王安忆", year: 2010 },{ title: "寻找安详", author: "郭文斌", year: 2000 },{ title: "推拿", author: "毕飞宇", year: 1999 },{ title: "苏东坡传", author: "林语堂", year: 2015 },{ title: "长安的荔枝", author: "马伯庸", year: 2021 },{ title: "林清玄散文集", author: "林清玄", year: 1988 },{ title: "橘颂", author: "张炜", year: 2022 }
])

image-20230821213731860

查找数据

在 MongoDB 中,您可以使用 find 方法来查找数据。find 方法返回满足特定查询条件的文档集合,您可以根据需要进行筛选、排序和投影。以下是一些常见的用法示例:

基本查询:

以下是一个基本的查询示例,展示如何查找所有在 “Books” 集合中的文档:

// 连接到 MongoDB 数据库
use mydatabase// 查询 "Books" 集合中的所有文档
db.Books.find()

条件查询:

您可以通过传递查询条件来过滤结果。以下示例展示如何查找作者是 “鲁迅” 的书:

// 查询作者是 "鲁迅" 的书
db.Books.find({ author: "鲁迅" })

投影查询:

通过投影操作,您可以指定要返回的字段。以下示例展示如何仅返回书名和作者字段:

// 查询并投影出书名和作者字段
db.Books.find({}, { title: 1, author: 1, _id: 0 })

排序查询:

使用 sort 方法可以对结果进行排序。以下示例展示如何按年份升序排序查询结果:

// 查询并按年份升序排序
db.Books.find().sort({ year: 1 })

限制查询结果数量:

使用 limit 方法可以限制返回的文档数量。以下示例展示如何返回前三本书的数据:

// 查询并限制结果数量为三
db.Books.find().limit(3)

请注意,find 方法返回一个游标(Cursor),您可以通过迭代游标来获取查询结果。您可以使用 .toArray() 方法将游标转换为数组,或使用 forEach 循环来逐个处理结果。

更新数据

在 MongoDB 中,您可以使用 updateOneupdateMany 方法来更新文档。

单条更新:

以下是如何使用 updateOne 方法将 { title: "橘颂", author: "张炜", year: 2022 } 这本书的出版年份更新为 2023:

// 连接到 MongoDB 数据库
use mydatabase// 更新指定文档的出版年份
db.Books.updateOne({ title: "橘颂", author: "张炜", year: 2022 },{ $set: { year: 2023 } }
)

在上述示例中,我们使用 updateOne 方法来更新满足特定条件的文档。第一个参数是查询条件,指定要更新的文档。第二个参数使用 $set 操作符来指定要更新的字段及其新值。

多条更新

如果您想要更新多个文档,可以使用 updateMany 方法。例如:

// 连接到 MongoDB 数据库
use mydatabase// 更新满足条件的所有文档的出版年份
db.Books.updateMany({ title: "橘颂", author: "张炜", year: 2022 },{ $set: { year: 2023 } }
)

这会将满足条件的所有文档的出版年份更新为 2023。

需要注意的是,更新操作默认只会更新匹配的第一条文档。如果您希望更新所有匹配的文档,请使用 updateMany 方法。

删除数据

在 MongoDB 中,您可以使用 deleteOnedeleteMany 方法来删除文档。这些方法允许您删除满足特定条件的文档,以满足您的数据管理需求。

单条删除:

使用 deleteOne 方法可以删除满足特定条件的第一条文档。以下是一个示例,展示如何使用 deleteOne 方法删除一本书:

// 连接到 MongoDB 数据库
use mydatabase// 删除满足条件的第一条文档
db.Books.deleteOne({ title: "橘颂", author: "张炜", year: 2023 }
)

在上述示例中,我们使用 deleteOne 方法删除满足指定条件的第一条文档。

多条删除:

使用 deleteMany 方法可以删除满足特定条件的所有文档。以下是一个示例,展示如何使用 deleteMany 方法删除多本书:

// 连接到 MongoDB 数据库
use mydatabase// 删除满足条件的所有文档
db.Books.deleteMany({ year: "2021" }
)

在上述示例中,我们使用 deleteMany 方法删除所有年份是 “2021” 的书。

img

上面的书都很精彩奥,个人非常推荐,大家可以多看看书,增长文化底蕴,拓宽眼界!

SpringBoot整合MongoDB

整合方式一:继承MongoRepository

在 Spring Boot 中整合 MongoDB 是相对简单的过程。Spring Boot 提供了一个名为 Spring Data MongoDB 的子项目,它大大简化了与 MongoDB 的集成。以下是在 Spring Boot 中整合 MongoDB 的基本步骤:

  1. 添加依赖:
    在您的 Spring Boot 项目的 pom.xml 文件中添加以下依赖,以引入 Spring Data MongoDB:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope>
    </dependency>
    
  2. 配置数据库连接:
    application.propertiesapplication.yml 配置文件中配置 MongoDB 连接信息,如数据库名称、主机和端口等:

    spring.data.mongodb.uri=mongodb://192.168.18.181:27017/my_db
    

    yml配置

    spring:data:mongodb:uri: mongodb://192.168.18.181:27017/my_db
    
  3. 创建实体类:
    创建一个 POJO(普通 Java 对象)类,表示要存储在 MongoDB 中的文档。您可以使用 Spring Data 注解来定义文档和字段映射。例如:

    import lombok.Data;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "books")
    @Data
    public class Book {@Idprivate String id;private String title;private String author;private int year;
    }
  4. 创建 Repository 接口:
    创建一个继承自 org.springframework.data.mongodb.repository.MongoRepository 接口的自定义 Repository 接口。例如:

    import com.xiaohui.pojo.Book;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import java.util.List;public interface BookRepository extends MongoRepository<Book, String> {// 可以定义自定义查询方法List<Book> findByAuthor(String author);
    }
  5. 使用 Repository:
    在您的服务类或控制器中,注入您的自定义 Repository,并使用它来执行 MongoDB 操作。例如:

    import com.xiaohui.mapper.BookRepository;
    import com.xiaohui.pojo.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;@Service
    public class BookService {private final BookRepository bookRepository;@Autowiredpublic BookService(BookRepository bookRepository) {this.bookRepository = bookRepository;}public List<Book> findByAuthor(String author) {return bookRepository.findByAuthor(author);}}
    

6.创建控制层访问接口:

import com.xiaohui.pojo.Book;
import com.xiaohui.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.List;@RestController
@RequestMapping("/api")
public class BookController {@Autowiredprivate BookService bookService;@GetMapping("/list")public HashMap<String,Object> getBookList() {String author = "张炜";HashMap<String,Object> books=new HashMap<>();List<Book> bookList=bookService.findBooksByAuthor(author);books.put("books",bookList);return books;}
}

image-20230821225522851

整合方式二:注解MongoTemplate

如果您想在 Spring Boot 中使用 MongoTemplate 来执行 MongoDB 操作,而不是使用 MongoRepository,您可以按照以下步骤进行操作:

  1. 注入 MongoTemplate
    在您的服务类(或其他需要执行 MongoDB 操作的地方),注入 MongoTemplate

    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.stereotype.Service;@Service
    public class BookService {private final MongoTemplate mongoTemplate;public BookService(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;}}
    
  2. 执行 MongoDB 操作:
    使用注入的 MongoTemplate 实例来执行 MongoDB 操作。以下是使用 MongoTemplate 执行查询的示例:

    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;public List<Book> findByAuthor(String author) {Query query = new Query(Criteria.where("author").is(author));return mongoTemplate.find(query, Book.class);
    }
    

    在上述示例中,我们使用 Criteria 来构建查询条件,然后使用 mongoTemplate.find 方法来执行查询。您可以根据需要使用不同的 Query 方法来执行查询、更新、删除等操作。

    image-20230821225337999

这样,您可以使用 MongoTemplate 来执行 MongoDB 操作,而不依赖于 MongoRepository。请注意,使用 MongoTemplate 可以提供更灵活的操作和更多的自定义能力,但也需要您手动处理更多的细节。

区别分析

MongoTemplateMongoRepository 都是在 Spring Boot 中与 MongoDB 进行交互的方法,但它们有一些区别。以下是这两种方法的主要区别,我们做一个简单的了解:

  1. 抽象程度和自动化:

    • MongoRepository 提供了一套高级别的抽象,使您能够通过定义接口方法来执行常见的数据库操作,如保存、查询、更新和删除等。Spring Data MongoDB 将自动实现这些方法,无需编写具体的查询代码。
    • MongoTemplate 提供了更底层的操作方式,您需要手动构建和执行查询、更新和删除操作。这提供了更大的灵活性和自定义能力,但也需要您编写更多的代码。
  2. 自动化查询和条件查询:

    • MongoRepository 允许您通过方法命名约定自动生成查询。例如,通过在方法名中使用 findByAuthor,您可以自动构建查询来查找指定作者的文档。

      image-20230821225655644

    • MongoTemplate 使用 QueryCriteria 来构建查询,您需要手动编写查询条件和其他操作。

  3. 适用场景:

    • MongoRepository 适用于那些需要执行标准化、常见查询操作的场景,特别是对于简单的CRUD操作。
    • MongoTemplate 适用于那些需要更复杂、自定义查询和操作的场景,以及那些需要更精细控制的数据库操作。
  4. 复杂性和学习曲线:

    • MongoRepository 的抽象层次较高,对于开发者来说更容易上手和使用,尤其是对于基本的数据库操作。
    • MongoTemplate 提供了更多的灵活性,但需要更多的学习和了解 MongoDB 查询语法和操作。

总的来说,MongoRepository 提供了快速且易于使用的方法来执行常见的数据库操作,适用于大多数情况。MongoTemplate 则适用于那些需要更复杂操作、自定义查询和更高级的数据库操作的情况。在选择使用哪种方法时,您应该根据项目需求和开发团队的经验来进行决策。

复杂操作方式一:

多条件查询:

假设您有一个 Book 实体类,并且您想要根据多个条件进行查询,比如查找年份大于某个值且作者是某个人的书籍:

public interface BookRepository extends MongoRepository<Book, String> {List<Book> findByYearGreaterThanAndAuthor(int year, String author);
}

聚合操作:

聚合操作允许您对数据进行分组、计数、求和等操作。下面是一个示例,演示如何使用 Spring Data MongoDB 的聚合操作:

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;Aggregation aggregation = Aggregation.newAggregation(Aggregation.group("author").count().as("count"),Aggregation.sort(Sort.Direction.DESC, "count")
);AggregationResults<AuthorBookCount> results = mongoTemplate.aggregate(aggregation, "books", AuthorBookCount.class
);
List<AuthorBookCount> authorBookCounts = results.getMappedResults();

在上述示例中,我们使用聚合操作计算每个作者的书籍数量,并按数量降序排序。

排序和分页:

您可以使用 Sort 对象来指定排序条件,使用 Pageable 对象来实现分页。

Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("year").descending());
Page<Book> books = bookRepository.findAll(pageable);

删除操作:

要执行删除操作,您可以使用 Spring Data MongoDB 的删除方法,根据条件进行删除。

void deleteByYearAndAuthor(int year, String author);

以上结合咋们目前现有的数据,展示了如何使用 MongoRepository 执行多条件查询、聚合、排序、分页和删除操作。根据具体情况,您可以使用 Spring Data MongoDB 的方法命名约定、查询构建和聚合操作来实现更复杂的操作。如果更复杂的操作无法通过方法命名约定实现,您还可以使用 @Query 注解来编写自定义的查询语句。

复杂操作方式二:

当使用 MongoTemplate 进行复杂的数据操作时,您可以通过构建查询条件、聚合管道、排序以及其他操作来实现更高级的功能。以下是几个示例,涵盖了多条件查询、聚合、排序和删除操作:

  1. 多条件查询:
    假设您想要根据不同的条件来查询数据,例如查询年份大于某个值并且作者是特定作者的书籍。这里我们使用 Criteria 构建多个条件:

    Query query = new Query();
    query.addCriteria(Criteria.where("year").gt(2000).and("author").is("鲁迅"));
    List<Book> books = mongoTemplate.find(query, Book.class);
    
  2. 聚合操作:
    假设您想要对数据进行聚合操作,例如统计每个作者的书籍数量。这里我们使用聚合管道:

    Aggregation aggregation = Aggregation.newAggregation(Aggregation.group("author").count().as("bookCount")
    );
    AggregationResults<AuthorBookCount> result = mongoTemplate.aggregate(aggregation, "books", AuthorBookCount.class);
    List<AuthorBookCount> authorBookCounts = result.getMappedResults();
    

    AuthorBookCount 是一个简单的DTO类,用于存储聚合结果。

  3. 排序操作:
    假设您想要根据年份进行排序查询,可以在 Query 中添加排序选项:

    Query query = new Query();
    query.with(Sort.by(Sort.Direction.ASC, "year"));
    List<Book> books = mongoTemplate.find(query, Book.class);
    
  4. 删除操作:
    假设您想要删除满足特定条件的文档,可以使用 remove 方法:

    Query query = new Query();
    query.addCriteria(Criteria.where("year").lt(2000));
    mongoTemplate.remove(query, Book.class);
    

MongoTemplate 还提供了更多高级功能,如更新、分页、批量操作等。这里就不一一举例,咋们自己举一反三,自己去了解!!!

好久没有更新文章了,也是最近工作有一些繁杂,导致没有时间,自己也没有兴趣去学习新的东西!今日好转,我也开始接收新的事物,将自己的学习心得与大家共享,希望大家可以受益,从此以后,所有的文章都就不再捆绑粉丝了,之前也是为了让更多的朋友看见,现在慢慢阅读量还可以,就大可不必了!希望大家学得开心,学有所获,学有所成!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、1.保护模式

访问外部硬件有两个方式&#xff1a; 将某个外设的内存映射到一定范围的地址空间中&#xff0c; CPU 通过地址总线访问该内存区域时会落到外设 的内存中&#xff0c;这种映射让 CPU 访问外设的内存就如同访问主板上的物理内存一样外设是通过 IO 接口与 CPU 通信的&#xff0c;…

LiveData 面试题库、解答、源码分析

作者&#xff1a;唐子玄 1. LiveData 如何感知生命周期的变化&#xff1f; 先总结&#xff0c;再分析&#xff1a; Jetpack 引入了 Lifecycle&#xff0c;让任何组件都能方便地感知界面生命周期的变化。只需实现 LifecycleEventObserver 接口并注册给生命周期对象即可。LiveDa…

6-1 使用函数求奇数和

分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求实现一个函数&#xff0c;计算N个整数中所有奇数的和&#xff0c;同时实现一个判断奇偶性的函数。 函数接口定义&#xff1a; int even( int n ); int OddSum( int List[], int N ); 其中函数even将根据…

Azure如何调整虚拟机的大小

参考 https://blog.csdn.net/m0_48468018/article/details/132267096 创建虚拟机进入资源&#xff0c;点击大小选项&#xff0c;并对大小进行调整 点击如下图的cloud shell,进入Azure CLI,使用az vm resize 进行大小调整 命令中的g对应资源组&#xff0c;n对应虚拟机名称&am…

PHP“牵手”淘宝商品评论数据采集方法,淘宝API接口申请指南

淘宝天猫商品评论数据接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在电商平台的开发中&#xff0c;详情接口API是非常常用的 API&#xff0c;因此本文将详细介绍详情接口 API 的使用…

robust distortion-free watermarks for language models

本文是LLM系列文章&#xff0c;针对《robust distortion-free watermarks for language models》的翻译。 语言模的鲁棒无失真水印 摘要1 引言2 方法和理论分析3 实验结果4 讨论 摘要 我们提出了一种从自回归语言模型中在文本中植入水印的方法&#xff0c;该方法对扰动具有鲁…

【腾讯云 Cloud studio 实战训练营】云端 IDE 构建移动端H5

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

【Git】(五)切换分支

1、切换分支 git checkout newBranch 2、如果需要保留本地修改 ​git status git add . git commit --amend git checkout newBranch 3、强制切换分支 放弃本地修改&#xff0c;强制切换。 git checkout -f newBranch

【BUG】 ‘cv2.cv2‘ ‘wechat_qrcode_WeChatQRCode‘

首发博客地址 https://blog.zysicyj.top/ 报错内容 AttributeError: module cv2 has no attribute wechat_qrcode_WeChatQRCode 解决方法 pip install opencv-pythonpip install opencv-contrib-python 本文由 mdnice 多平台发布

RGOS日常管理操作

RGOS日常管理操作 一、前言二、RGOS平台概述2.1、锐捷设备的常用登陆方式2.2、使用Console登入2.3、Telnet远程管理2.4、SSH远程管理2.5、登陆软件&#xff1a;SecureCRT 三、CLI命令行操作3.1、CLI命令行基础3.2、CLI模式3.3、CLI模式互换3.4、命令行特性3.4.1、分屏显示3.4.2…

多线程知识点

1.多线程 例如&#xff1a;一个短视频&#xff0c;一个线程复制管理视频&#xff0c;一个线程负责管理声音&#xff0c;一个线程负责管理弹幕 进程&#xff1a;Process,程序一旦开始运行就是是一个进程 线程&#xff1a;Thread&#xff0c;一个程序运行后&#xff0c;里面就包含…

微服务基础概念【内含图解】

目录 拓展补充&#xff1a; 单体架构 分布式架构 面向服务的体系结构 云原生 微服务架构 什么是微服务&#xff1f; 微服务定义 拓展补充&#xff1a; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;最终打成一个包部署 优点&#x…

XenDesktop5.6如何连接数据库

Citrix在数据库的连接方式上一直不统一&#xff0c;但是也还是有迹可循的。 经过了好长时间的下载以后&#xff0c;今天终于有时间来测试一下最新版本的XenDesktop 5 SP1&#xff0c;由于结合了其他组件和环境的需要&#xff0c;所以&#xff0c;选择了独立部署数据库&#xf…

3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately

在16世纪&#xff0c;西班牙探险家皮萨罗带领约200名西班牙士兵和37匹马进入了印加帝国。尽管印加帝国的军队数量达到了数万&#xff0c;其中包括5,000名精锐步兵和3,000名弓箭手&#xff0c;他们装备有大刀、长矛和弓箭等传统武器。但皮萨罗的军队中有100名火枪手&#xff0c;…

达梦数据库权限和预定角色介绍

概述 本文对达梦数据库数据库和对象权限及DM预定义角色及角色创建进行介绍。 1.权限管理 用户权限有两类&#xff1a;数据库权限和对象权限。 数据库权限主要是指针对数据库对象的创建、删除、修改的权限&#xff0c;对数据库备份等权限。 数据库权限一般由 SYSDBA、SYSAU…

驰振风荷载计算

3.1考虑横风向振动的风荷载 图 3.1 流场中的横流截面 Fig 3.1 The lateral section in flow-field 结构沿高度Z方向作用在结构单位长度上的横风向荷载主要来自于升力&#xff0c;其次来自于阻力。高度z处单位长度上的风荷载 式中&#xff0c;为来流与结构的夹角&#xff0c;称…

Android Okhttp 源码浅析三

核心方法 getResponseWithInterceptorChain() internal fun getResponseWithInterceptorChain(): Response {// Build a full stack of interceptors.val interceptors mutableListOf<Interceptor>()interceptors client.interceptorsinterceptors RetryAndFollowUpI…

springBoot 配置文件引入 redis 的相关参数说明

在Spring Boot应用中使用Redis作为缓存或数据存储时&#xff0c;可以在应用的配置文件中配置相关参数。下面是常用的Redis配置参数及其说明&#xff1a; spring.redis.host: Redis服务器主机地址&#xff0c;默认为localhost。spring.redis.port: Redis服务器端口&#xff0c;…

Wlan——STA上线流程与802.11MAC帧讲解

目录 802.11MAC帧基本概念 802.11帧结构 802.11MAC帧的分类 管理帧 控制帧 数据帧 STA接入无线网络流程 信号扫描—管理帧 链路认证—管理帧 用户关联—管理帧 用户上线 802.11MAC帧基本概念 802.11协议在802家族中的角色位置 其中802.3标准属于以太网的一种帧格式…

HPE服务器常见报错信息以及解决方案

General controller issues 常规控制器问题 Controllers are no longer redundant 控制器不再冗余 HPE Dynamic Smart Array B140i drives are not found when RAID mode is disabled 禁用 RAID 模式时找不到 HPE 动态智能阵列 B140i 驱动器 Data located on drives accessed i…