一、介绍
在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识!
最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法是将监听的消息数据存储在数据库,以便好对异常消息数据进行追溯,消息内容使用text
类型存储,起初因为数据内容很短,没啥毛病,但是当随着业务的扩展,收到的消息内容越来越长,最后发现数据库中的text
字段类型根本没法存储,于是在这个时候,就开始考虑采用更加合适的数据库来存储这种消息数据!
在经过一番讨论之后,对于这种 json 类型的消息数据的存储,大家一致认为采用 MongoDB 是最佳的选择!
据官方介绍,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的一款高性能的 NoSQL 数据库。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value
)对组成。
其中的文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组,数据结构的支持非常灵活!
的确,在使用的过程当中,正如所介绍的,数据的存储和查询,性能极快,而且很好的满足我们的需求!
话不多说,下面我们就一起来了解一下,这款数据库应该如何使用!
二、环境配置
在学习它之前,我们需要先搭建好环境,MongoDB 的安装也非常简单!
2.1、Windows 平台
如果你是 Windows 平台,MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制,安装基本是傻瓜式的操作,登录 MongoDB 官网并且下载安装包,然后一步一步的操作即可!
2.2、Linux 平台
生产环境基本都是 Linux 平台,为了和生产保持一致,小编采用的服务器是CentOS7
,安装过程也比较简单!
- 创建资源文件
sudo vim /etc/yum.repos.d/mongodb-org-4.0.repo
- 编辑内容如下
[mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
- 运行以下命令安装 mongodb
sudo yum install -y mongodb-org
- 安装完成之后,配置
mongod.conf
允许远程连接
#编辑mongod.conf vim /etc/mongod.conf #将net:bindIp: 127.0.0.1 改为 0.0.0.0 net: bindIp:0.0.0.0
- 最后启动服务
#开启服务 systemctl start mongod #其他服务 #关闭服务 systemctl stop mongod #重启服务 systemctl restart mongod #开机自启 systemctl enable mongod
至此,环境配置已经完成!
三、数据库操作
MongoDB 的数据操作,是开发人员接触最频繁的部分,第一次使用的时候,你会发现它和我们传统使用的 sql 脚本命令完全不同,但是又类似,下面我们就一起来深入的了解下!
3.1、进入 MongoDB
进入 MongoDB 服务很简单,输入如下命令即可进入!
mongo
例如,在CentOS
里面输入命令之后,进入的服务界面如下:
3.2、创建数据库
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
输入如下命令,可以查询数据库列表
#查询数据库列表 show dbs #命令输出结果: admin config local
可以看到,当前 MongoDB 有三个数据库!
输入如下命令,可以切换到admin
数据库
use admin
输入db
命令,还可以查询当前数据库
db
3.3、创建用户
默认的情况下,是没有用户的,也无法操作数据库,因此我们需要创建一个用户,同时给他分配权限!
3.3.1、创建一个管理员用户
创建一个用户、密码都是admin
的用户,同时给这个用户分配userAdminAnyDatabase
角色,指定的数据库为admin
!
#创建一个admin用户 db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
其中字段含义如下:
- user:用户的名字;
- pwd:用户的密码;
- roles:指定用户的角色,可以用一个空数组给新用户设定空角色。
- roles 中的 role:指定角色。
- roles 中的 db:指定的数据库,例如上面中的角色
userAdminAnyDatabase
,只在 admin 数据库中可用。
角色在 MongoDB 中,代表着某个用户是否有权限访问数据库或者操作数据库,理解这点非常重要!
MongoDB 角色定义如下:
角色类型 | 名称 | 描述 |
admin数据库角色 | readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
admin数据库角色 | readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
admin数据库角色 | userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
admin数据库角色 | dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
admin数据库角色 | clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
admin数据库角色 | root | 只在admin数据库中可用,超级账号,超级权限 |
数据库管理角色 | dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
数据库管理角色 | userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
数据库用户角色 | read | 允许用户读取指定数据库 |
数据库用户角色 | readWrite | 允许用户读写指定数据库 |
3.3.2、创建一个不受访问限制的超级用户
如果你想创建一个不受访问限制的超级用户,赋予root
角色即可!
#创建超级用户 db.createUser( { user:"root", pwd:"root", roles:["root"] } )