前言
不同于传统的关系型数据库如 MySQL,数据存储在表格里,类似于 Excel 电子表格,其中数据按行(记录)和列(字段)组织。
MongoDB 是一种非关系型数据库,使用文档存储(document store),以类似 JSON 格式存储数据。
核心概念
- 数据库(database):数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
- 集合(collection):集合类似于 JS 中的数组,在集合中可以存放很多文档
- 文档(document):文档是数据库中的最小单位,类似于 JS 中的对象,文档可以包含不同的数据类型(如字符串、数字、数组、嵌套文档等)和复杂的嵌套结构。
- MongoDB 使用 BSON, 一种类似于 JSON 的二进制格式(比 JSON 更多的数据类型,如日期和二进制数据类型),用于存储和传输 MongoDB 中的文档。
- 索引(Index):索引支持对 MongoDB 集合中的数据进行快速搜索。默认情况下,每个集合都有一个对 _id 字段的自动索引。其他索引需要根据查询的需要手动添加。
- 复制集(Replica Set):复制集是 MongoDB 中的数据冗余和备份机制,用于提高数据的可用性。复制集中的数据自动同步,确保所有副本都保存最新数据。在主节点故障时,复制集可以自动选举新的主节点,保证数据库的可用性。
- 分片(Sharding):分片是 MongoDB 中的一种水平扩展方法。它涉及将数据分布在多个服务器上,每个服务器上存储数据集的一部分。分片可以提高大数据集的处理能力和吞吐量。
- 聚合(Aggregation):聚合是一种强大的数据处理工具,用于执行复杂的数据搜索、过滤、分组和排序等操作。MongoDB 提供了聚合管道,允许用户定义一个数据处理的多阶段管道,每个阶段对数据进行操作并传递给下一阶段。
- 操作符(Operators):在查询和更新文档时,操作符用于指定操作的类型。例如查询操作符(如 <math xmlns="http://www.w3.org/1998/Math/MathML"> g t 、 gt、 </math>gt、lt 用于比较),更新操作符(如 <math xmlns="http://www.w3.org/1998/Math/MathML"> s e t 用于设置字段值),逻辑操作符(如 set 用于设置字段值),逻辑操作符(如 </math>set用于设置字段值),逻辑操作符(如and、$or)等。
安装与运行
docker 安装
首先,我们需要在 docker desktop 中搜索 mongodb 镜像:
运行容器,指定容器名、映射的端口号,以及挂载到 /data/db 目录:
普通安装
- 下载地址: Download MongoDB Community Server
- 建议选择 zip 类型, 通用性更强 配置步骤如下:
- 将压缩包移动到 C:\Program Files 下,然后解压
- 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
- 以 mongodb 中 bin 目录作为工作目录,启动命令行
- 运行命令 mongod
看到最后的 waiting for connections
则表明服务 已经启动成功
然后可以使用 mongo 命令连接本机的 mongodb 服务
注意:
- 为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中
千万不要选中服务端窗口的内容
,选中会停止服务,可以敲回车
取消选中
命令行操作
使用命令行操作数据库较少,了解为主。
通过 mongosh 命令进入 MongoDB 的交互式界面:
显示所有数据库
bash
show dbs;
show databases;
查看下现有的 database。
切换创建数据库
用 use
bash
use hello-mongo;
然后 db 命令查看当前 database:
bash
db;
但这时候你再用 show dbs 会发现没有这个 db:
因为默认要有了一个 collection 之后才会把 database 写入硬盘。
bash
db.createCollection('aaa');
删除数据库
bash
db.dropDatabase();
此时 shwo database;
创建集合
javascript
db.createCollection('集合名称')
显示当前数据库中的所有集合
javascript
show collections
重命名集合
javascript
db.集合名.renameCollection('newName')
删除特定集合
javascript
db.集合名.drop()
向集合中插入文档
javascript
db.集合名.insert({name: "云牧", age: 30})
查询集合中的文档
javascript
db.集合名.find()
数据中的 _id 是 mongodb 自动生成的唯一编号,用来唯一标识文档。
- 查询特定文档:
javascript
db.集合名.find({name: "云牧"})
更新集合中的文档
javascript
db.集合名.update(查询条件, 新的文档)
db.集合名.update({name: "黛玉"}, {$set: {age: 31}})
删除集合中的文档
javascript
db.集合名.remove(查询条件)
db.集合名.remove({name: "黛玉"})
mysql 使用 sql 来 crud 的,而 mongodb 里是用 api。
但完成的功能是一样的,可以在 mongodb 文档看到每个 api 对应的 sql 写法。
mongo compass
MongoDB 提供了官方的 GUI 工具------Mongo Compass,通过图形界面,用户就可以不敲命令来管理数据库了。
下载官方 GUI 工具 Mongo Compass:
连接上 mongodb 的 server:
在 GUI 工具里操作就很方便直观了。
可以看到所有的 database、collection、document。
在这里输入过滤条件后点击 find:
更新和删除也都很直观: