目录
[admin 数据库](#admin 数据库)
[config 数据库](#config 数据库)
[local 数据库](#local 数据库)
[初始化 jkglxt 数据库](#初始化 jkglxt 数据库)
[添加 mongodb 依赖](#添加 mongodb 依赖)
[编写 yaml配置文件](#编写 yaml配置文件)

学习思路
- 0基础感受非关系性数据库的玩法与用处
- 高层技术用不上,但基本使用与操作还是要有的
学习上问题
- 网传 非关系性数据库需要搭配持久化使用
- mongodb + srv,中的srv是什么?srv是资源记录的类型,那它有什么用处?
- BSON 与 JSON 的区别什么? BSON基于JSON且有JSON没有的数据类型
- Google 的 Protocol Buffer 是什么?
- MongoDB的命名规范是什么?驼峰命名
- MongoDB 有必要用ORM吗还是用ODM
- mongoose ODM框架Mongoose.js中文网、
- 图片怎么存储?是不是使用ODM框架技术就不用直接创建数据,而是创建集合就行了?
- 文件存储不得是用专业的吗?Amazon S3、Google Cloud Storage
- mysql + mongodb 如何共同一起使用?
- 第一种是将图片数据转化为bson二进制作为字典的键值对进行保存
- 第二种是利用mongodb提供的GridFS进行保存
官网下载与手册
下载:Install MongoDB Community Kubernetes Operator | MongoDB
手册:What is MongoDB? - Database Manual v8.0 - MongoDB Docs
数据库工具:Download MongoDB Command Line Database Tools | MongoDB
开启服务
cmd - 输入 mongod 启动服务
bash
mongod
查看服务
Ctrl+Shift + Esc - 服务

原生软件
打开MongoDB Compass

新建连接
点击 Add new connection - 配置连接的名称(只是名字) - 连接即可

观察界面
点击连接的 >_ 可以打开控制台,同时每个连接都有三个数据库 ,localh中存在 startup_log 集合,他们有什么用处呢?

admin
数据库
admin
数据库是 MongoDB 的管理数据库,主要用于存储与数据库管理相关的数据和配置。以下是它的主要用途:
-
用户和角色管理 :存储用户和角色信息,包括权限设置。所有数据库的用户和角色信息都存储在
admin
数据库中。 -
系统配置:存储一些全局的系统配置信息。
-
运行时状态:存储数据库的运行时状态信息,例如服务器状态、性能指标等。
-
访问控制 :在启用身份验证的情况下,
admin
数据库是用户身份验证的中心点。
config
数据库
config
数据库主要用于存储 MongoDB 集群的配置信息。以下是它的主要用途:
-
分片集群配置 :在分片集群中,
config
数据库存储了分片的配置信息,例如分片的元数据、分片键的配置等。 -
副本集配置 :在副本集中,
config
数据库存储了副本集的配置信息,例如成员信息、优先级等。 -
集群状态:存储集群的运行状态信息,例如分片的当前状态、副本集的同步状态等。
local
数据库
local
数据库主要用于存储与单个 MongoDB 实例相关的本地数据。以下是它的主要用途:
-
副本集操作日志 :在副本集中,
local
数据库存储了操作日志(Oplog),用于记录主节点的操作,以便从节点可以同步这些操作。 -
本地配置:存储与本地实例相关的配置信息,例如本地的会话信息、临时数据等。
-
本地状态:存储本地实例的运行状态信息,例如会话状态、临时数据等。
总结
-
admin
数据库:主要用于用户和角色管理、系统配置、运行时状态等。 -
config
数据库:主要用于分片集群和副本集的配置信息、集群状态等。 -
local
数据库:主要用于副本集的操作日志、本地配置、本地状态等。
数据库相关
与关系性数据库对比
特性 | MongoDB 集合 | 关系型数据库表 |
---|---|---|
数据存储 | 文档(Document) | 行(Row) |
数据结构 | 动态模式(Dynamic Schema) | 固定模式(Static Schema) |
数据类型 | BSON 格式,支持嵌套文档和数组 | 固定的数据类型,如 INT、VARCHAR 等 |
索引 | 可以在任意字段上创建索引 | 可以在任意列上创建索引 |
事务支持 | 支持多文档事务(从 MongoDB 4.0 开始) | 支持 ACID 事务 |
数据完整性 | 依赖应用层逻辑 | 依赖数据库约束(如外键) |
数据库基础操作
安全性补充操作
# 暂停写入(允许叠多个锁)
db.fsyncLock()
# 暂停写入
db.fsyncUnlock()
可以直接 使用数据库新的 myUser 数据库
bash
# 使用/创建数据库
use myUser
# 查询数据库
show dbs
# 删除数据库
db.dropDatebase()
创建集合(表)
bash
# 插入文档(记录)
db.myUser.insertOne({name:"chen"})
db.myUser.insertOne({name:"chen",password:"123456"}) # 上面那条同样也拥有password,不过是空值
# 查询指定文档(支持模糊查询)
db.myUser.find([name:"chen"})
# 查询所有文档
db.myUser.find()
# 精准删除文档
db.myUser.delete({name:"chen"})
# 删除集合内容
db.myUser.drop()
整合Springboot技术
初始化 jkglxt 数据库
java
# 创建/使用数据库
use jkglxt
# 添加集合(表)
db.createCollection("user_data")
# 添加文档(记录)
db.user_data.insertOne({userId:34,userHeadImage:""})
db.user_data.insertOne({userId:35,userHeadImage:""})
db.user_data.insertOne({userId:36,userHeadImage:""})
添加 mongodb 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
编写 yaml配置文件
bash
spring:
data:
mongodb:
uri: mongodb://localhost:27017/jkglxt
database: jkglxt
编写实体类
java
package com.jkglxt.www.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(collection = "user_data")
public class UserData {
private String id;
private int userId;
private String userHeadImage;
}
编写ODM映射
这里有点像 ORM 的mybatis-plus一样,实体类与表类型固定死
java
package com.jkglxt.www.mapper;
import com.jkglxt.www.entity.UserData;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserDateRepository extends MongoRepository<UserData, String> {
}
编写服务层接口
java
package com.jkglxt.www.service.servielmp;
import com.jkglxt.www.entity.UserData;
import java.util.List;
public interface UserDataServiceImpl {
// 所有获取用户信息
public List<UserData> getUserData();
}
实现服务层接口
java
package com.jkglxt.www.service;
import com.jkglxt.www.entity.UserData;
import com.jkglxt.www.mapper.UserDateRepository;
import com.jkglxt.www.service.servielmp.UserDataServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserDataService implements UserDataServiceImpl {
private UserDateRepository userDateRepository;
// 构造注入
@Autowired
public UserDataService(UserDateRepository userDateRepository) {
this.userDateRepository = userDateRepository;
}
@Override
public List<UserData> getUserData() {
List<UserData> userData = userDateRepository.findAll();
return userData;
}
}
编写控制层
java
package com.jkglxt.www.controller;
import com.jkglxt.www.entity.UserData;
import com.jkglxt.www.service.servielmp.UserDataServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserDataController {
private UserDataServiceImpl userDataService;
@Autowired
private UserDataController(UserDataServiceImpl userDataService) {
this.userDataService = userDataService;
}
// 查询用户
@GetMapping("/getUserDataUrl")
public List<UserData> getUserData() {
List<UserData> userDataList = userDataService.getUserData();
return userDataList;
}
}
接口测试
我这里使用的是Apifox

感谢观看