![MongoDB进阶与实战:微服务整合、性能优化、架构管理](https://wfqqreader-1252317822.image.myqcloud.com/cover/697/38209697/b_38209697.jpg)
1.2 类比SQL模型
1.2.1 数据结构
如果你已经熟知关系型数据库(RDBMS)的概念模型,那么不难理解database、table、row、column这几个基本概念。MongoDB使用的数据模型与它们非常类似,见表1-2。
表1-2 MongoDB概念
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_22_1.jpg?sign=1739035483-3LeJtlVDmLyURs61rcZGXUNC0pZqDUeJ-0-f1114a74bb2adc8a996f800f3eb8da52)
说明如下:
● 数据库(database):最外层的概念,可以理解为逻辑上的名称空间,一个数据库包含多个不同名称的集合。
● 集合(collection):相当于SQL中的表,一个集合可以存放多个不同的文档。
● 文档(document):一个文档相当于数据表中的一行,由多个不同的字段组成。
● 字段(field):文档中的一个属性,等同于列(column)。
● 索引(index):独立的检索式数据结构,与SQL概念一致。
● _id:每个文档中都拥有一个唯一的_id字段,相当于SQL中的主键(primary key)。
● 视图(view):可以看作一种虚拟的(非真实存在的)集合,与SQL中的视图类似。从MongoDB 3.4版本开始提供了视图功能,其通过聚合管道技术实现。
● 聚合操作($lookup):MongoDB用于实现“类似”表连接(table join)的聚合操作符。
尽管这些概念大多与SQL标准定义类似,但MongoDB与传统RDBMS仍然存在不少差异,包括:
(1)半结构化,在一个集合中,文档所拥有的字段并不需要是相同的,而且也不需要对所用的字段进行声明。因此,MongoDB具有很明显的半结构化特点。除了松散的表结构,文档还可以支持多级的嵌套、数组等灵活的数据类型,非常契合面向对象的编程模型。
(2)弱关系,MongoDB没有外键的约束,也没有非常强大的表连接能力。类似的功能需要使用聚合管道技术来弥补。
1.2.2 类SQL语句
既然MongoDB视一切为文档,那么自然也包括数据操作的命令。
所有的增加、删除、修改、查询命令都通过JSON文档进行描述。值得庆幸的是,如果你已经熟知标准的SQL语法(ANSI SQL),那么在转换到MongoDB这种文档式命令风格时或许会觉得很自然。其中原因就在于,SQL本身也是一种结构化的表达语言,例如一个select查询语句的基本组成包括:
● select子句,表示查询什么内容。
● from子句,表示从哪里查。
● where子句,表示按什么条件过滤。
MongoDB的查询命令几乎有着一模一样的语义,可以说MongoDB的指令实质上也是一种类SQL语义的实现。
接下来,通过一组对比来快速了解MongoDB的命令风格。
1.创建表
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_23_1.jpg?sign=1739035483-Mj39Uko6j6r6mnLG95Tx2EgljUm618bS-0-0d4dc9ac2caa47572dd82d77d3e928e0)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_23_2.jpg?sign=1739035483-VxjX00ArpvIpNNqbzXZ2ypPq9GwV3ICV-0-76b3a085865fb5f1bc31faf2d5cbf318)
MongoDB在首次写入文档时,会自动创建集合。
2.创建索引
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_1.jpg?sign=1739035483-XEj5eUw6lCVarN00CgJ8cTITbdlQ8oZh-0-f7847712542d03dec2f9442007957913)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_2.jpg?sign=1739035483-ufpGbL8pUjsMYJrE9gf5xoiVJELkYa8R-0-6dea7aca71ef5fe1f7dd1c37e6da5ca9)
3.插入数据
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_3.jpg?sign=1739035483-MDKG6SpPeJEPGHTdlo4KwgK0cUSJ1iUo-0-7cd47908e42e11df2b77e0d2eecb2d20)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_4.jpg?sign=1739035483-9OcoF1zt1ENTOLOhSsXsi7xYa8xzHUBt-0-d6fd3694e430164e8ca9f63bcd880111)
4.查询全表
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_5.jpg?sign=1739035483-4BaqyWWcw8XrMi1DO3V4Dy572dR0sidH-0-36f8784f44b4700f66a65452e9329e1c)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_6.jpg?sign=1739035483-IRtIRmxzbiJ9Luz5sq1fM1m1XJq1ekkI-0-948d69ae452fb11708b1c47a964b665b)
5.条件查询
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_7.jpg?sign=1739035483-27VrrdFpzaADdplIryFyTUqdd9VYdIcL-0-30ffbf5b351c0270c1340cc94bc6c29c)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_24_8.jpg?sign=1739035483-1ZCodM9QecoTVsF3LQZDtj3ElO0bVQZ7-0-c68283b0d74f311ed5ce892d05c6a31f)
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_1.jpg?sign=1739035483-tBiBXls2i7IzqdFAfzNG3W7yr0qeobVr-0-0a32743da7f37f653c87777a53aa4e01)
6.分页查询
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_2.jpg?sign=1739035483-x0CiDR9g51fBs2EAveqfl69hRhJ22DnX-0-818204aef248c0032f2d46482ae73ca0)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_3.jpg?sign=1739035483-uOZPL1JT0qGUgKaYfy5mR1XxWQPoldxn-0-0cd9962d702699af31c9c184a69e047d)
7.更新数据
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_4.jpg?sign=1739035483-GjYfJy4Z0g5Y1lMzCLOf160WowldUyKv-0-9a22b1c4e20b876d2523f79e2fcf348c)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_5.jpg?sign=1739035483-gkbKkoOHyw2cUSxWyo9TrO0MiGcoZgi8-0-6f3129bb9b836d3d6534a93c3823a76a)
8.删除数据
SQL语句如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_6.jpg?sign=1739035483-fbevhxpwMUryrxjHRl0MREYHbVQILl9V-0-0f03509cc83032da020fc973a19d3585)
类似的MongoDB命令如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_25_7.jpg?sign=1739035483-r7v6Vf7pvlYzmN7SX02vprt96WjswFh6-0-5a5ce8323864909ebe999a1986419bd2)
或许,你基本能理解每个命令的含义。如果仍然存疑,请不要着急,在后面的章节中仍然会介绍这些命令的使用方法。