MongoDB介绍
MongoDB是跨平台的、一个基于分布式文件存储的数据库。由C++语言编写。用它创建的数据库具备性能高、可用性强、易于扩展等特点。MongoDB将数据存储为一个文档,数据结构由键值(key:value)对组成。MongoDB文档类似于 JSON 对象。字段值可以包含字符串、数字、数组、当然也可以是另一个文档。文档是可以嵌套的。
集合相当于关系型数据库中的表。集合就是一组MongoDB文档。集合存在于数据库中,集合没有固定的结构,这意味着可以对集合插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
注:
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
集合名用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
文档相当于关系型数据库中的行。它一组键值对,具有动态的模式,所以文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这一点,跟关系型数据库有很大的不同。
注:
文档中的键/值对是有序的。
MongoDB区分类型和大小写。
MongoDB的文档不能有重复的键。
键不能含有\0 (空字符)。
.和$有特别的意义,只有在特定环境下才能使用。
参考:https://www.cnblogs.com/clsn/p/8214194.html#auto_id_10
MongoDB数据存储格式:JSON格式和BSON格式
BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
二进制的JSON,JSON文档的二进制编码存储格式
BSON有JSON没有的Date和BinData
MongoDB中document以BSON形式存放
MongoDB适用场景
网站数据、缓存等大尺寸、低价值的数据
在高伸缩性的场景,用于对象及JSON数据的存储。
MongoDB安装
MongoDB官网:https://www.mongodb.com/
CentOS6.X版本软件下载地址:https://www.mongodb.org/dl/linux/x86_64-rhel62
步骤:
创建用户:
[root@localhost ~]# groupadd -g 800 mongod
[root@localhost ~]# useradd -u 801 -g mongod mongod
修改密码
[root@localhost ~]# echo 123456 |passwd --stdin mongod
下载安装程序:
[root@localhost ~]# mkdir -p /usr/local/mongodb/
[root@localhost ~]# cd /usr/local/mongodb/
[root@localhost mongodb]# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.11.tgz
解压安装
[root@localhost mongodb]# tar -xf mongodb-linux-x86_64-rhel62-3.6.11.tgz
创建目录
[root@localhost mongodb]# mkdir -p bin conf log data
复制文件
[root@localhost mongodb]# cp mongodb-linux-x86_64-rhel62-3.6.11/bin/* bin/
添加环境变量
[root@localhost mongodb]# vim /etc/profile
添加export PATH=/usr/local/mongodb/bin:$PATH
[root@localhost mongodb]# source /etc/profile
测试:
1 | 启动:mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongodb.log --port=27017 --logappend --fork |
登录数据库:
[root@localhost bin]# mongo
MongoDB shell version v3.6.11
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
使用配置文件的方式启动数据库:
[root@localhost bin]# cd ../conf/
[root@localhost conf]# vim mongod.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
logappend=1
fork=1
启动
[root@localhost conf]# mongod -f mongod.conf
关闭
[root@localhost conf]# mongod -f mongod.conf –shutdown
使用YAML格式配置文件:
1 | [root@localhost conf]# vim mongod.conf |
在数据库中关闭数据库的方法:
use admin
db.shutdownServer()
用户管理
MongoDB数据库默认是没有用户名及密码的,即无权限访问限制。为了方便数据库的管理和安全,需创建数据库用户。
用户权限
Read 允许用户读取指定数据库
readWrite 允许用户读写指定数据库
dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root 只在admin数据库中可用。超级账号,超级权限
创建用户
1 | > use admin |
创建管理员角色用户的时候,必须到admin下创建。 删除的时候也要到相应的库下操作。
创建完成后查看用户
1 | > show tables; |
验证用户是否能用
1 | > db.auth('root','123456'); |
在配置文件中开启用户验证,修改配置文件
1 | [root@localhost conf]# cat >>mongod.conf<<-'EOF' |
重启后
mongo -uroot -p123456 admin
创建对某库的只读用户roles: [ { role: “read”, db: “test” } ]
创建某库的读写用户roles: [ { role: “readWrite”, db: “test” } ]
创建对多库不同权限的用户
roles: [ { role: "readWrite", db: "app" },
{ role: "read", db: "test" }
]
删除用户
db.dropUser("hu")
创建数据库的管理员
roles: [ { role: "dbAdmin", db: "test" } ]
创建数据库读写权限的用户并具有clusterAdmin权限:
roles: [ { role: "readWrite", db: "test" },
{ role: "clusterAdmin", db: "admin" }
MongoDB和SQL对比(转自网络)
安装启动服务失败,直接跳过,手动启动
.\mongod –dbpath=”D:\Program Files\MongoDB\Server\4.0\data”