【BackEnd--Mongodb】学习笔记(完整详细版)

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: MongoDB是一种面向文档的非关系型数据库,所谓的面向文档是一种类似JSON的结构,因此可以简单理解MongoDB存储的是各种各样的JSONMongoDB可以快速开发web型应用,因为存储的是JSON格式,因此无需像关系型数据库那样需要建表,非常的的灵活。

 

image.gif编辑

 

一、介绍

在介绍MongoDB之前首先介绍NoSQL非关系型数据库:通常用于关联较少且大规模的数据,其分类主要如下

类型 实例
文档型数据库 MongoDB
键值对数据库 Redis、Voldemort、Scalaris
列存储数据库 Sybase IQ、Vertica
图存储数据库 Neo4j、FlockDB、GraphDB

MongoDB是一种面向文档半结构化非关系型数据库,所谓的面向文档是一种类似JSON的结构称为BSON,因此可以简单理解MongoDB存储的是各种各样的JSON

MongoDB可以快速开发web型应用,因为存储的是BSON格式,因此无需像关系型数据库那样需要建表,非常的的灵活

image.gif编辑

二、安装部署

进入MongoDB官网 MongoDB Community Download | MongoDB

官网会根据你的电脑型号推荐最适合的MongoDB版本,Package选择msi就好了,因为相比于zip格式,msi是傻瓜模式,很多的基础配置自动帮你配置好,因此进入该官网只需要点击Download即可

image.gif编辑

在data目录中创建db文件夹

image.gif编辑

cmd终端配置数据库地址

mongod --dbpath E:\Mongodb\data\db

image.gif

将Mongodb中的bin文件夹设置于环境变量中

image.gif编辑

在bin同级目录下创建mongodb.config文件,并在文件中配置日志和数据库存储路径信息

image.gif编辑

image.gif编辑

 在bin目录中配置MongoDB启动关闭

image.gif编辑

mongod -dbpath "E:\Mongodb\data\db" -logpath "E:\Mongodb\log\mongo.log" -install -serviceName "MongoDB"

image.gif

测试启动(注意一定要用管理员启动)

image.gif编辑

进入测试网站127.0.0.1:27017 ,如果出现以下内容则表示MongoDB启动成功

image.gif编辑

使用Navicat数据库管理工具创建自己的MongoDB数据库并进行连接

image.gif编辑

关闭服务器

image.gif编辑

三、基础知识

3.1 基本概念

下面表格对比了关系型数据库MySQL和非关系型数据库MongoDB

MySQL MongoDB Interpret
database database 数据库
table collection Mysql称为表,MongoDB称为集合
row document Mysql称为数据行,MongoDB称为数据文档
column field Mysql称为数据列,MongoDB称为字段
primary key primarykey 主键

注意

1创建文档的时候可以不用预先创建数据库和集合,因为系统会自动创建

2 主键会自动创建维护,名字为  _id

3.2 数据类型

MongoDB支持以下的数据类型

数据类型  解释
String(字符串) mongodb中的字符串是UTF-8有效的
Integer整数 存储数值。整数可以是32位或64位,具体取决于您的服务器
Boolean(布尔) 存储布尔(true/false)值
Double(双精度 存储浮点值
Object对象 嵌入式文档
Date(日期 以UNIX时间格式存储当前日期或时间
Arrays(数组 将数组或列表或多个值存储到一个键中
Code(代码 将JavaScript代码存储到文档中
Regular expression正则表达式 存储正则表达式
Binary data(二进制数据 存储二进制数据
Object ID(对象ID 存储文档ID
Symbol(符号 与字符串相同,用于具有特定符号类型的语言
Null (空值) 存储Null值
imestamp(时间戳 存储时间戳
Min/ Max keys(最小/最大键 将值与最低和最高BSON元素进行比较

3.3  基本操作

操作 作用
mongo 连接数据库
db 查看当前操作的数据库
use *** 切换到指定数据库
show databases 查看所有的数据库
show collections 查看当前数据库中的所有集合

四、CRUD

4.1 增加文档

db为操作的数据库,collection为操作的集合

一般我们都使用万能插入

操作 语句
增加一条数据 db.collectionName.insertOne({name:'老大'})
增加多条数据 db.collectionName.insertMany([{name:'老大'},{name:'老二'}])
万能插入

db.collectionName.insert({name:'老三'}) 

db.collectionName.insert({name:'老四'},{name:'老五'})

// 插入一条数据
db.user.insertOne({
name:String('老大'),age:14,}
)
// 插入多条数据
db.user.insertMany([
{name:String('老三'),age:12,},
{name:String('老四'),age:11,}
])

image.gif

image.gif编辑

4.2 删除文档

操作 语句
删除一个文档 db.collectionName.deleteOne(条件)
删除所有文档 db.collectionName.deleteMany(条件)
万能删除 db.collectionName.remove(条件)
// 删除一条年龄14岁的小伙伴,数据表中最早创建的数据
db.user.deleteOne({age:14})

image.gif

4.3 修改文档

操作 语句
修改一个文档 db.collectionName.update(条件,修改)
修改多个文档 db.collectionName.updateOne(条件,修改)
万能修改 db.collectionName.updateMany(条件,修改)
// 单个修改,将老大年龄修改为15
db.user.updateOne({name:'老大'},{$set:{age:15}})

image.gif

4.4 查询文档

操作 语句
查询所有文档

db.collectionName.find()

db.collectionName.find({})

条件查询 db.collentionName.find({条件})
条件查询对象第一个 db.collentionName.findOne({条件})
// 查询user集合全体数据
db.user.find()
// 查询老大信息
db.user.find({name:'老大'})
// 查询所有14岁的好兄弟,并返回第一条查询的结果
db.user.findOne({age:14})

image.gif

五、SpringBoot集成

我们需要在依赖中导入spring-data-mongodb,其主要提供了MongoTemplateMongoRepository两种方式来访问Mongodb,前者功能强大,后者操作简单

5.1 环境配置

配置xml文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

image.gif

配置application.properties文件

格式:mongodb://用户名:用户密码@主机地址:27017/数据库名?

spring.data.mongodb.uri:mongodb://root:123456@localhost:27017/mongodbdemo?maxIdleTimeMS=86400000

image.gif

5.2 基于MongoRepository实现CRUD

只需要接口继承MongoRepository即可使用其内置的各种方法。但是要注意定义名要符合Restful风格。类似于Mybatis-plus和JPA

@Repository
public interface UserMapper extends MongoRepository<User,String> {
    User getUserByUsername(String username);
}

image.gif

5.3 基于MongoTemplate实现CRUD

一般是当业务非常复杂时,内置的MongoRepository方法难以实现时才使用该方法,该方式需要写Mapper接口以及MapperImpl实现类。

在MapperImpl中使用的查询语句是使用Templat中的语法。

因此直观的来讲,要想完成一个业务有两种方法,第一种是在业务方法中调用多个使用MongoRepository的Mapper方法,另一种方法是一个业务调用少量功能十分强大的MongoTemplate方法

public interface UserMa {
    void deleteById(String userName);
}

image.gif

Repository
public class UserMapperImpl implements UserMapper {
    @Autowired
    private MongoTemplate template;
    @Override
    public void deleteById(String userName) {
        Query query = new Query();
        query.addCriteria(Criteria.where("userName").is(userName));
        template.remove(query, NewUser.class);
    }
}

image.gif

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
NoSQL 关系型数据库 MySQL
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
408 0
|
NoSQL Linux MongoDB
MongoDB学习笔记(四) 集群搭建之主从复制
MongoDB学习笔记(四) 集群搭建之主从复制
587 0
|
分布式计算 NoSQL MongoDB
MongoDB学习笔记(三) 聚合
MongoDB学习笔记(三) 聚合
127 0
|
JSON NoSQL 关系型数据库
MongoDB学习笔记(二) 增删改查
MongoDB学习笔记(二) 增删改查
189 0
|
NoSQL 数据可视化 Linux
MongoDB学习笔记(一) 安装配置
MongoDB学习笔记(一) 安装配置
967 0
|
存储 监控 NoSQL
MongoDB 快速入门-MongoDB 最佳实践(二)|学习笔记
快速学习 MongoDB 快速入门-MongoDB 最佳实践(二)
476 0
MongoDB 快速入门-MongoDB 最佳实践(二)|学习笔记
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
存储 SQL JSON
走进 MongoDB|学习笔记
快速学习走进 MongoDB
231 0
走进 MongoDB|学习笔记
|
SQL 存储 分布式计算
MongoDB 聚合框架|学习笔记
快速学习 MongoDB 聚合框架
424 0
MongoDB 聚合框架|学习笔记