天天看点

mongodb介绍、mongodb安装、连接mongodb、mongodb用户管理一:mongodb介绍二:mongodb安装三:连接mongodb四:mongodb用户管理

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

c++编写,基于分布式的,属于nosql的一种

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

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

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

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

mongodb和关系型数据库对比

mongodb介绍、mongodb安装、连接mongodb、mongodb用户管理一:mongodb介绍二:mongodb安装三:连接mongodb四:mongodb用户管理

关系型数据库数据结构

mongodb介绍、mongodb安装、连接mongodb、mongodb用户管理一:mongodb介绍二:mongodb安装三:连接mongodb四:mongodb用户管理

mongodb数据结构

mongodb介绍、mongodb安装、连接mongodb、mongodb用户管理一:mongodb介绍二:mongodb安装三:连接mongodb四:mongodb用户管理

epel自带的mongodb版本为2.6,我们需要安装3.4版本

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

cd /etc/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

yum list |grep mongodb //可以看到mongodb相关的rpm包

yum install -y mongodb-org

systemctl start mongod //启动服务

在本机可以直接运行命令mongo进入到mongodb shell中

如果mongodb监听端口并不是默认的27017,则在连接的时候需要加--port 选项,例如

mongo --port 27018

连接远程mongodb,需要加--host,例如

mongo --host 127.0.0.1

如果设置了验证,则在连接的时候需要带用户名和密码

mongo -uusername -ppasswd --authenticationdatabase db //这个和mysql挺像

use admin//需要切换到admin库

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

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

use admin //切换到admin库

db.system.users.find() //列出所有用户,需要切换到admin库

show users //查看当前库下所有的用户

db.dropuser('admin') //删除用户

若要用户生效,还需要编辑启动脚本vim /usr/lib/systemd/system/mongod.service,在options=后面增--auth

重启服务systemctl restart mongod

mongo -u "admin" -p "admin122" --authenticationdatabase "admin"

use db1

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库进行身份验证,直接访问会提示验证失败。

use db2

db.auth("test1", "123aaa")

mongodb用户角色

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

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

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

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

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

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

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

useradminanydatabase:只在admin数据库中可用,赋予用户所有数据库的useradmin权限

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

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

mongodb库管理

db.version() //查看版本

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

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

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

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

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

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