初见 MongoDB
初见 MongoDB
官网:https://www.mongodb.com/zh-cn
MongoDB 是什么
我们先要弄清楚 MongoDB 不是什么。MongoDB 不是传统的关系型数据库,在大家比较熟悉的关系型数据库中,数据被存储在表格里,表格的列代表数据的属性,表格的行就是数据本身了。在不同的表格之间可以通过相同地列建立起关系。比如说下方有两个表格,第一个表格存储的是银行账户的信息,我们看到有两个账号,它们同属于同一个客户;在第二个表格中,我们存储的就是客户的信息。我们可以看到这两个表格当中拥有一个相同地列【客户编号】,利用这个列我们就可以把账户表格和客户表格关联在一起。因此可以知道每个账户的号码、余额属于哪个客户,以及客户的姓名和电话号码了
账户号码 | 客户编号 | 余额 |
---|---|---|
0001 | 01 | 100 |
0002 | 01 | 50 |
客户编号 | 姓名 | 电话号码 |
---|---|---|
01 | 张三 | 12345678910 |
02 | 李四 | 18888888888 |
而 MongoDB 却不是这样的关系型数据库,它属于非关系型数据库。而非关系型数据库中存储的并不是表格。有些非关系型数据库是键值对存储,例如 Redis;有些是列存储,例如 Cassandra;有些是存储对象本身,例如 Objectivity;有些是存储图形关系,例如 Neo4j;而 MongoDB 则是存储文档
MongoDB 是一款支持多种使用案例和数据模型的文档数据库,可帮助开发人员快速构建、优化和部署应用程序数据平台
MongoDB 数据库结构
一个 MongoDB 数据库中可以看到有很多集合,拥有相似内容的文档被归类到同一个集合之下,每个文档中包含各种各样的字段以及对应的值。MongoDB 支持的是一种 JSON 的扩展格式:Bson
![](https://img.sherry4869.com/blog/it/database/mongodb/img.png)
在这里需要注意:同一个集合里面的文档可以拥有完全不同的字段,比如说我们可以把描述账户的文档和描述客户信息的文档放在同一个集合里。MongoDB 数据库并不会阻止我们。像 MongoDB 这样的非关系型数据库里并不存在一个提前制定好的数据格式,如果我们需要在文档中增加一个新字段,只要直接把包含新字段的文档写进数据库就可以了,并不需要去更改在这之前存储的旧文档。MongoDB 也不会报告任何错误,这种灵活性恰恰是非关系型数据库的一个优势
Windows 下载 MongoDB
下载地址:https://www.mongodb.com/try/download/community
学习用社区版就好
勾选 zip 点击 Download(压缩包的安装模式更可控, 而且更接近生产环境部署到服务器的流程)
下载完成后解压并重命名为 mongo,存放到 D:\DevelopmentTools\mongodb\ 目录下,并把 D:\DevelopmentTools\mongodb\mongo\bin 路径添加到系统环境变量 Path 里面
使用管理员权限打开 CMD CD 到 D:\DevelopmentTools\mongodb\mongo\bin 目录下,执行以下命令:
mongod.exe --bind_ip 127.0.0.1 --logpath "D:\DevelopmentTools\mongodb\mongo\logs\mongodb.log" --logappend --dbpath "D:\DevelopmentTools\mongodb\mongo\data" --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
这里指定了数据库数据存储路径和日志存储文件,如果什么都不提示就是成功了
检验是否已安装服务:使用管理员权限打开 CMD 输入
net start mongodb
如提示【发生系统错误 5。拒绝访问】则需要使用管理员权限打开 CMD
在 4.x 版本以下你会发现 bin 目录下有一个 mongo.exe 文件, 5.x 版本就废弃了, 我们当前 7.x 版本的 bin 下只有 mongos.exe 和 mongod.exe, 文件作用详见官方文档。所以你可以在 bin 下面执行 mongod 命令和 mongos 命令,但是 mongo 命令没有了,这时你需要下载安装 mongosh 来代替老版本的 mongo 作为客户机界面
使用 Docker 容器运行 MongoDB
下载 MongoDB 的官方 Docker 镜像
docker pull mongo:4
查看下载的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE mongo 4 052ca8f03af8 2 weeks ago 381MB
启动一个 MongoDB 服务器容器
docker run --name mymongo -v /mymongo/data:/data/db -d mongo:4
--name mymongo
:--name
选项是用来给容器指定一个名称。如果不使用此选项,Docker 会自动生成一个随机的字符串名称。使用--name
选项可以更方便地在 Docker 网络中识别和引用容器-v /mymongo/data:/data/db
:-v
选项是将容器内运行的数据持久化到主机上。将主机的 /mymongo/data 目录建立映射关系挂载到容器的 /data/db 目录。这样主机和容器之间可以共享数据,主机这边修改了之后,容器里面的配置文件也会同步修改,反之亦然-d
:让容器在后台运行而不是执行COMMAND
指令后关闭在执行完后会得到一个容器ID
查看 Docker 容器状态
docker ps
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES 16f853053fle mongo:4 "docker-entrypoint..." About a minute ago Up About a minute 27017/tcp mymongo
在默认情况下,MongoDB 服务器使用 27017 端口
查看数据库服务器日志
docker logs mymongo
Mongo Express
Mongo Express 是一个基于网络的 MongoDB 数据库管理界面
下载 mongo-express 镜像
docker pull mongo-express
运行 mongo-express
docker run --link mymongo:mongo -p 8081:8081 mongo-express
--link
选项使得可以联系 mongo-express 和之前已经启动的 MongoDB 服务器容器,同时还要开放 mongo-express 默认的 8081 端口
它能最直观的让大家看到 MongoDB 服务器里面都有哪些内容,初次运行起来的 MongoDB 有三个数据库【admin、config、local】这些数据库里保存的都是系统配置文件,在我们的日常操作中不建议去更改这三个系统数据库
Mongo Shell
Mongo Shell 是用来操作 MongoDB 的 JavaScript 客户端界面
使用 Docker 运行 mongo shell
docker exec -it mymongo mongo
Windows 下载地址:https://www.mongodb.com/try/download/shell
下载完成后解压,把 D:\DevelopmentTools\mongodb\mongosh\bin 路径添加到系统环境变量 path 里面
使用 mongosh 也就是 CMD 界面的数据库客户端:
![](https://img.sherry4869.com/blog/it/database/mongodb/img_3.png)