一、MongoDB简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:
1.面向集合存储,易于存储对象类型的数据
2.模式自由
3.支持动态查询
4.支持完全索引,包含内部对象
5.支持复制和故障恢复
6.使用高效的二进制数据存储,包括大型对象
7.文件存储格式为BSON(一种JSON的扩展)
MongoDB与关系型数据库对比:
对比项 | MongoDB | MySQL Oracle |
---|---|---|
表 | 集合 | 二维表table |
表的一行数据 | 文档document | 一条记录record |
表字段 | 键key | 字段field |
字段值 | 值value | 值value |
主外键 | 无 | PK,FK |
灵活度扩展性 | 极高 | 差 |
逻辑结构关系对比
关系型数据库:
MySQL数据库(database)、表(table)、记录(rows)三个层次概念组成。
非关系型数据库:
MongoDB数据库(database)、集合(collection)、文档对象(document)三个层次概念组成。
MongoDB里的集合对应于关系型数据库里的表,但是集合中没有列、行和关系的概念,集合中只有文档,一个文档就相当于一条记录,这体现了模式自由的特点。
二、安装
-
下载
下载地址:https://www.mongodb.com/download-center/community
使用yum安装
[root@master ~]# vi /etc/yum.repos.d/mongodb-org-4.0.repo
[mngodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
这里可以修改 gpgcheck=0, 省去gpg验证。
# 更新所有包
[root@master ~]# yum update
# 安装MongoDB
[root@master ~]# yum -y install mongodb-org
# 查看mongo安装位置
[root@master ~]# whereis mongod
mongod: /usr/bin/mongod /etc/mongod.conf /usr/share/man/man1/mongod.1
# 修改配置文件
[root@master ~]# vi /etc/mongod.conf
bindIp: 172.0.0.1 改为 bindIp: 0.0.0.0
# 启动MongoDB
[root@master ~]# systemctl start mongod
# 设置开机启动
[root@master ~]# systemctl enable mongod
- 连接数据库
# 进入数据库
[root@master ~]# mongo
MongoDB shell version v4.0.13
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ac88d69d-23d5-4e64-8bd0-27ce9e0cfd46") }
MongoDB server version: 4.0.13
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten]
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten]
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten]
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten]
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-11-17T21:52:17.942+0800 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
# 查看数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
- 配置用户密码
# 超级管理员
db.createUser({user:"admin",pwd:"1234",roles:["userAdminAnyDatabase"]})
注意 : 这个上面创建一个拥有 userAdminAnyDatabase 角色,用来管理用户的用户,可以通过这个角色来创建、删除用户,这个并不能操作admin这个数据库,我们想要操作所有数据库的权限,此时我们可以在进行创建一个管理所有数据库的账号。
# 超级管理员
db.createUser({user:"root",pwd:"1234",roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
使用这个命令,可以添加所有的读写权限,我们发现mongodb对权限分的特别细,无法赋予多个权限,而且只能再admin数据库验证了用户后才可对其他数据库操作,所以添加了一个账号,先验证后,然后赋予所有数据库读写权限。
- 开启权限校验
# 编辑/etc/mongod.conf
security:
authorization: enabled
# 重启数据库
systemctl restart mongod
# 切换到数据库
> use admin
switched to db admin
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
三、MongoDB数据类型
数据类型 | 描述 | 举例 |
---|---|---|
null | 表示空值或未定义的对象 | {“x”:null} |
布尔值 | 真或假:true或false | {“x”:true} |
32位整数 | 32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数 | |
64位整数 | 64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数 | |
64位浮点数 | 64位浮点数。shell中的数字就是这一种类型 | {“x”:3.14,“y”:3} |
字符串 | UTF-8字符串 | {“foo”:“bar”} |
符号 | shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串 | |
对象id | 文档的12字节的唯一id | {“id”:ObjectId()} |
日期 | 从标准纪元开始的毫秒数 | {“date”:new Date()} |
正则表达式 | 文档中可以包含正则表达式,遵循JavaScript的语法 | {“foo”:/foobar/i} |
代码 | 文档中可以包含JavaScript代码 | {“x”:function(){}} |
未定义 | undefined | {“x”:undefined} |
数组 | 值的集合或者列表 | {“arr”: [“a”,“b”]} |
内嵌文档 | 文档可以作为文档中某个key的value | {“x”:{“foo”:“bar”}} |
四、MongoDB客户端工具
NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名称为MongoBooster。NoSQLBooster是一个跨平台,它自带一些mongodb工具来管理数据库和监控服务器。这个Mongodb工具包括服务器监控工具,Visual Explain Plan,查询构建器,SQL查询,ES2017语法支持等。
下载地址:https://nosqlbooster.com/downloads
-
安装连接
-
MongoDB使用
五、MongoDBCompass
MongoDB Compass是一款优秀可靠的mongodb可视化数据库管理软件。可以更加方便地与mongodb数据库进行交互,支持对数据库进行查询、分析或者查看数据库的结构等操作。
-
连接数据库