# springboot-mongodb-template-example **Repository Path**: fengdan80/springboot-mongodb-template-example ## Basic Information - **Project Name**: springboot-mongodb-template-example - **Description**: springboot 操作 MongoDB 示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-03-28 - **Last Updated**: 2025-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 一、MongoDB 简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,且与关系数据库的最为相像的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 ### 二、MongoDB 特征 MongoDB 是一个文档数据库,它的数据以文档方式进行存储,将数据存储在类似 JSON 的 BSON 文档中,其特征如下: **数据以 BSON 方式存储** - 允许灵活和动态的模式。 - 支持数组和嵌套对象作为值。 - 处理数据的最自然,最有效的方式。 - 文档模型轻松映射到应用程序代码中的对象 **强大的查询语言** - 支持聚合和其他现代用例,例如基于地理的搜索,图形搜索和文本搜索。 - 查询本身就是 JSON,因此很容易组合。不再需要串联字符串来动态生成 SQL 查询。 - 丰富而富有表现力的查询语言,无论您在文档中有多嵌套,都可以按任何字段进行过滤和排序。 **拥有关系数据库的所有功能** - 支持查询联接。 - 具有快照隔离功能的分布式多文档 ACID 事务。 - 两种类型的关系,而不是一种” 引用” 和” 嵌入式”。 **分布式数据库为核心** - 水平扩展 - 内置了高可用性 - 地理分布并且易于使用 **MongoDB 免费使用** ### 三、MongoDB 概念 简单介绍下 MongoDB 的概念知识,方便后续使用 SpringBoot 操作 MongoDB 时候对 MongoDB 相关概念知道其作用。 > 本文章并不是用于介绍 MongoDB 知识,而是介绍在 Java 语言中 SpringBoot 框架里如何操作 MongoDB。所以,在操作 MongoDB 前,最好对其知识点进行一下系统的学习。 **1、基本概念** MongoDB 基本概念指的是学习 MongoDB 最先应该了解的词汇,比如 MongoDB 中的” 数据库”、” 集合”、” 文档” 这三个名词: - **文档(Document):** 文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。 - **集合(Collection):** 集合指的是文档组(类似于 Mysql 中的表的概念),里面可以存储许多文档。 - **数据库(Database):** MongoDB 中可以存在多个数据库,每个数据库中中用有不同的集合与用户权限,这样可以供不同的项目组使用不同的数据库。 当然,还有其它一些概念,比如: - **_id(主键):** 主键主要作用是用于保证数据完整性,加快数据库的访问速度,方便快速定位某个文档。在 MongoDB 中可以手动指定文档主键 ID,如果未手动指定则 MongoDB 会生成 12 位的 ObjectID。 - **index(索引):** 索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,其能够对数据库文档中的数据进行排序的一种结构。索引通常能极大提高文档查询效率,如果没有设置索引,MongoDB 会遍历集合中的整个文档,选取符合查询条件的文档记录。这种查询效率是非常低的,当处理大量时,查询可能需要花费几十秒甚至几分钟,这对网站的性能是非常致命的。 - **field(字段):** 文档中的字段,类似于关系型数据库中的列。 - **aggregation(聚合):** MongoDB 中聚合主要用于处理数据处理,例如统计平均值、求和等,可以快速通过聚合操作,汇总数据,尤其是对绘制图表添加了便利。 **2、数据类型** 以下为 MongoDB 中常用的几种数据类型: - **String:** 字符串,存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 - **Integer:** 整型数值,用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 - **Boolean:** 布尔值,用于存储布尔值(true/false)。 - **Double:** 双精度浮点值,用于存储浮点值。 - **Min/Max keys:** 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 - **Array:** 用于将数组或列表或多个值存储为一个键。 - **Timestamp:** 时间戳。记录文档修改或添加的具体时间。 - **Object:** 用于内嵌文档。 - **Null:** 用于创建空值。 - **Symbol:** 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 - **Date:** 日期时间,用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 - **Object ID:** 对象 ID,用于创建文档的 ID。 - **Binary Data:** 二进制数据,用于存储二进制数据。 - **Code:** 代码类型,用于在文档中存储 JavaScript 代码。 - **Regular expression:** 正则表达式类型,用于存储正则表达式。 ### 四、Springboot 操作 MongoDB 示例 这里使用 Spring Data MongoDB 封装的 MongoDB 官方 Java 驱动 MongoTemplate 对 MongoDB 进行操作。 > 关于使用简单的 Repositories 方式来操作 MongoDB 这种用法只能实现较简单的操作,使用简单但是灵活性比较差,所以这里就不介绍这种使用方式了。