MongoDB介绍和安装

MongoDB介绍

MongoDB是跨平台的、一个基于分布式文件存储的数据库。由C++语言编写。用它创建的数据库具备性能高、可用性强、易于扩展等特点。MongoDB将数据存储为一个文档,数据结构由键值(key:value)对组成。MongoDB文档类似于 JSON 对象。字段值可以包含字符串、数字、数组、当然也可以是另一个文档。文档是可以嵌套的。

20200413174638

20200413174652

集合相当于关系型数据库中的表。集合就是一组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数据的存储。

20200413174557

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
2
3
4
5
6
7
8
9
10
启动:mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongodb.log --port=27017 --logappend --fork
关闭:mongod --shutdown --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongodb.log --port=27017 --logappend --fork
--dbpath 数据存放路径
--logpath 日志文件路径
--logappend 日志输出方式
--port 启用端口号
--fork 在后台运行
--auth 是否需要验证权限登录(用户名和密码)
--bind_ip 限制访问的ip
--shutdown 关闭数据库

登录数据库:

[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
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost conf]# vim mongod.conf
systemLog:
destination: file
path: "/usr/local/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/usr/local/mongodb/data"
processManagement:
fork: true
net:
port: 27017

在数据库中关闭数据库的方法:

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> use admin
switched to db admin

> db.createUser(
... {
... user:"root",
... pwd:'123456',
... roles:[{role:"root",db:"admin"}]
... });
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

创建管理员角色用户的时候,必须到admin下创建。 删除的时候也要到相应的库下操作。

创建完成后查看用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> show tables;
system.users
system.version
> show users;
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

验证用户是否能用

1
2
> db.auth('root','123456');
1

在配置文件中开启用户验证,修改配置文件

1
2
3
4
5
[root@localhost conf]# cat >>mongod.conf<<-'EOF'
> security:
> authorization: enabled
> EOF
[root@localhost conf]# mongod restart

重启后

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对比(转自网络)

20200413175520

20200413175548

20200413175600

安装启动服务失败,直接跳过,手动启动

.\mongod –dbpath=”D:\Program Files\MongoDB\Server\4.0\data”