nosql—MongoDB(一)

回复 收藏

## 21.26 MongoDB介绍

* 官网 www.mongodb.com, 当前最新版3.4

* 文档型数据库

* C++编写,基于分布式的,属于NoSQL的一种

* 在NoSQL中是最像关系型数据库的

* MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。

* 关于JSON http://www.w3school.com.cn/json/index.asp

* 因为基于分布式,所以很容易扩展

### 非关系型数据库和关系型数据库对比

![mark](http://oqwym6cik.bkt.clouddn.com/blog/20171004/173551088.png?imageslim)  

#### 关系型数据库数据结构

![mark](http://oqwym6cik.bkt.clouddn.com/blog/20171004/173631546.png?imageslim)

#### MongoDB数据结构

![mark](http://oqwym6cik.bkt.clouddn.com/blog/20171004/173700993.png?imageslim)

## 21.27 MongoDB安装

epel自带2.6版本的MongoDB,在此安装MongoDB v3.4,方法如下:  

官方安装文档: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/  

基本思路:创建一个最新版本MongoDB的yum源,然后yum安装。  

### 安装准备

```

[root@adailinux ~]# cd /etc/yum.repos.d/

[root@adailinux yum.repos.d]# vim mongodb-org-3.4.repo

[mongodb-org-3.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

[root@adailinux yum.repos.d]# yum list |grep mongodb

mongodb-org.x86_64                        3.4.9-1.el7                  mongodb-org-3.4

mongodb-org-mongos.x86_64                 3.4.9-1.el7                  mongodb-org-3.4

mongodb-org-server.x86_64                 3.4.9-1.el7                  mongodb-org-3.4

mongodb-org-shell.x86_64                  3.4.9-1.el7                  mongodb-org-3.4

mongodb-org-tools.x86_64                  3.4.9-1.el7                  mongodb-org-3.4

```

即,安装包创建完成!  

### 安装

```

[root@adailinux ~]# yum install -y mongodb-org  

```

这样就安装好了,需要等待较长时间,耐心…  

## 21.28 连接MongoDB

### MongoDB配置文件

```

[root@adailinux ~]# vim /etc/mongod.conf

# where to write logging data.

systemLog:

  destination: file

  logAppend: true

  path: /var/log/mongodb/mongod.log

# Where and how to store data.

storage:

  dbPath: /var/lib/mongo

  journal:

    enabled: true

# how the process runs

processManagement:

  fork: true  # fork and run in background

  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces

net:

  port: 27017

  bindIp: 127.0.0.1,192.168.8.131  

# Listen to local interface only, comment to listen on all interfaces.

##绑定多个IP时用逗号分隔

#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

```

### 启动MongoDB

```

[root@adailinux ~]# systemctl start mongod

[root@adailinux ~]# ps aux |grep mongod

mongod    9258  1.8  7.2 972188 35752 ?        Sl   18:16   0:00 /usr/bin/mongod -f /etc/mongod.conf

[root@adailinux ~]# netstat -lntp |grep mongo

tcp        0      0 192.168.8.131:27017     0.0.0.0:*               LISTEN      9258/mongod

```

启动完成!

### 连接MongoDB

```

[root@adailinux ~]# mongo

>

```

如果不是监听本地IP和27017端口的话需要指定IP和端口:  

--port : 指定端口  

--host : 指定IP  

如果设置了密码,则在连接时需要指定用户名和密码:  

```

[root@adailinux ~]# mongo -uusername -p'passwd' --authenticationDatabase dbname

```

## 21.29 MongoDB用户管理

```

[root@adailinux ~]# mongo

切换到admin库:

> use admin

switched to db admin

创建用户并设定密码:

> db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

##用户名:admin;密码:admin122

##user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名 

列出所有用户:

> db.system.users.find()

##执行此操作前必须先切换到admin库  

查看当前库下所有用户:

> show users

删除用户:

> db.createUser({user:"adai",pwd:"123456",roles:[{role:"read",db:"testdb"}]})

##先添加一个用户

> show users

        "_id" : "admin.adai",

        "_id" : "admin.admin",

删除:

> db.dropUser('adai')

true

> show users;

        "_id" : "admin.admin"

```

如果要用户生效,还需要编辑启动脚本:

```

[root@adailinux ~]# vim /usr/lib/systemd/system/mongod.service

Environment="OPTIONS=--auth -f /etc/mongod.conf"

#在options后面添加--auth参数  

重载服务:

[root@adailinux ~]# systemctl daemon-reload

[root@adailinux ~]# systemctl restart mongod

[root@adailinux ~]# ps aux |grep mongod

mongod    9535 19.0  7.1 971164 35264 ?        Sl   18:46   0:00 /usr/bin/mongod --auth -f /etc/mongod.conf

```

再次连接MongoDB: 

```

[root@adailinux ~]# mongo --host 127.0.0.1 --port 27017 -u"admin" -p"admin122" --authenticationDatabase "admin"

```

**注意:** 创建用户的时候要针对一个库,登录的时候也需要指定对应的库。  

### 应用

```

> db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )

#test1用户对db1库读写,对db2库只读。

#之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。

#比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。

认证:

> db.auth('test1','123aaa')

1

##在哪个库下创建的用户就在哪个库进行认证操作

认证完成之后就可以使用相应的库了:

> use db2

```

### 常用操作

* db.version()  //查看版本

* use userdb  //如果库存在就切换,不存在就创建

* show dbs //查看库,此时userdb并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了 

* db.createCollection('clo1') //创建集合clo1,在当前库下面创建

* db.dropDatabase() //删除当前库,要想删除某个库,必须切换到那个库下

* db.stats()  //查看当前库的信息

* db.serverStatus()   //查看mongodb服务器的状态

### MongoDB用户角色(roles)

* Read:允许用户读取指定数据库

* readWrite:允许用户读写指定数据库

* dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

* userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

* clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

* readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

* readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

* userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

* dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

* root:只在admin数据库中可用。超级账号,超级权限

2017-10-18 09:01 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: