Spring Boot 2.0 读书笔记_16:MongoDB 上

版权声明:未经博主本人同意,请勿私自转发分享。 https://blog.csdn.net/Nerver_77/article/details/88903303

11.MongoDB

MongoDB 由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统。支持的数据格式为 BSON 格式, 类 JSON 格式,因此可以存储非常复杂的数据,具有以下特点:

  • 支持多种编程语言:Java、C++、PHP、C#、Python等。
  • 面向文档存储: 文档格式为类JSON的BSON格式。
  • 提供丰富的查询功能,支持对数据建立索引。
  • 模式自由,可任意改变文档格式。

关于上述概念需要做些补充:关于 NoSQL 和 BSON

  • NoSQL:NoSQL是不同于传统的关系数据库 [MySQL等] 的数据库管理系统的统称。
    • 两者最大的不同点在于:NoSQL 不使用 SQL 作为查询语言
    • NoSQL 数据存储格式无需固定
    • 最受欢迎的 NoSQL 数据库分别是:MongoDBApache CassandraRedisHBaseLevelDB
    • NoSQL 中的四大家族主要是: 列存储键值图像存储文档存储
    • NoSQL 优势:
      • 高可拓展性、分布式计算、架构灵活、半结构化数据、低成本
  • BSON格式
    • BSON 是 MongoDB 的数据存储格式,基于 JSON 格式。 BSON主要实现以下三点目标:
      • 更快的遍历速度:舍弃JSON麻烦的数据结构匹配,将每个元素的长度存放于元素头部,可通过元素长度直接指定位置读取
      • 操作更容易:对JSON而言,数据存储是无类型的。BSON会指定数据存储类型,根据数据存储类型变长存储
      • 增加了额外的数据类型:BSON添加了 bytearray 数据类型。使得二进制的存储不再需要先进行 base64 转换后在存储为 JSON这一过程,减少了计算开销和数据大小。

废话不多说,直接上手进行安装 MongoDB。首先访问官网进行 安装包 下载。[msi 格式的直接安装版本即可]
在这里插入图片描述
运行 msi 安装包文件进行傻瓜式安装即可,这里需要注意 Choose Setup Type 时选择: Custom [自定义安装]。

常用命令:

  • mongod,启动 MongoDB 数据库。通常指定一个数据存放目录,默认安装目录/data/db。可以通过下述命令进行指定特定数据存放目录:
    在这里插入图片描述
  • mongo,通过shell可以对 MongoDB 进行CURD等操作
  • mongodump,备份数据库
  • mongorestore,恢复数据库

运行MongoDB:/bin 目录下 运行 mongo.exe
在这里插入图片描述
创建账户进行访问控制,创建 baike 数据库,并在当前数据库中创建一个用户
在这里插入图片描述
数据库用户校验:使用 auth 命令进行用户验证
在这里插入图片描述
数据库操作命令查询:db.help()
在这里插入图片描述
插入文档

MongoDB 通过 集合 [Collection] 来管理数据库,类似数据库表。集合包含了多个文档 [Document],文档类似于数据库表记录。与关系型数据库的对比为:
在这里插入图片描述
MongoDB 不需要显式的创建集合,可以直接给集合添加文档。如下所示:
在这里插入图片描述
备注:_id,MongoDB 中以下划线开头的字段都具有特殊意义。_id 表示文档主键,如果文档没有提供主键,则系统默认自动生成一个类型为 ObjectID 的主键。在Spring Boot应用中推荐由应用生成文档主键。
在这里插入图片描述
ObjectID 是 MongoDB 的一种特殊类型,用12字节存储,分别是4字节时间戳、3字节机器唯一标识、2字节进程标识、3字节自增标识。
查询文档:MongoDB支持按照主键查询,也可以根据条件进行查询,支持类似 andorin 等操作

  • 查询所有文档: db.collection.find({ })
  • 条件查询文档
    在这里插入图片描述
    在这里插入图片描述
  • and + 模糊匹配
    在这里插入图片描述
  • or
    在这里插入图片描述
    常用查询比较举例:
常用查询命令 释义[关系型数据库]
$gt >
$gte >=
$lt <
$lte <=
$eq ==
$ne !=
$in in
$nin not in

更新文档

MongoDB 更新操作类似关系型数据库,提供以下API:

db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <replacement>, <options>)

filter 表示查询条件,update 表示更新文档数据、options 表示可以控制更新特性。举个栗子:
在这里插入图片描述
更新文档结果为: 木问题
在这里插入图片描述
replaceOne 和 updateOne 的区别在于前者是替换整个文档,后者是更新部分文档。两者都只替换 匹配到的第一条记录。如果有多条纪录匹配,可以使用 updateMany。

options 有如下属性可以控制更新特性:

  • upsert:默认为false。设置为true,未匹配的文档会 insert 到数据库中。
  • writeConcern,对写入进行配置,包含以下属性:
    • w,默认是 {w: 0},表示写入后不需要向数据库发送确认信息[ACK],这样做性能很高;{w: 1},数据写入到数据库便向客户端发送确认;{w: majority"},写入所有节点后向客户端发送确认。
    • wtimeout,当 w > 1 的时候,设置一个等待时间,单位为毫秒。如果超过这个时间,即使数据写入数据库中,客户端也得到一个错误信息。

删除文档

  • 删除所有文档
    在这里插入图片描述
  • 条件删除文档
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nerver_77/article/details/88903303