当前位置: 首页 > news >正文

21.26 mongodb介绍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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
  • 因为基于分布式,所以很容易扩展

MongoDB和关系型数据库对比:
mark
关系型数据库数据结构:
mark
MongoDB数据结构:
mark

21.27 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

分析:该安装步骤就是 按照官方提供的方法创建yum源;然后yum安装
这里由于下载太慢,我们直接把rpm分享到网上直接安装!

[root@Dasoncheng src]# cat /etc/yum.repos.d/mongodb-org-3.4.repo    ##自定义yum源;
[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@Dasoncheng src]# ll
total 402384
-rw-r--r--  1 root root      5976 Oct 17 16:17 mongodb-org-3.4.9-1.el7.x86_64.rpm
-rw-r--r--  1 root root  12187830 Oct 17 16:17 mongodb-org-mongos-3.4.9-1.el7.x86_64.rpm
-rw-r--r--  1 root root  20614326 Oct 17 16:17 mongodb-org-server-3.4.9-1.el7.x86_64.rpm
-rw-r--r--  1 root root  11772258 Oct 17 16:17 mongodb-org-shell-3.4.9-1.el7.x86_64.rpm
-rw-r--r--  1 root root  51154180 Oct 17 16:17 mongodb-org-tools-3.4.9-1.el7.x86_64.rpm
[root@Dasoncheng src]# rpm -ih mongodb-org*
warning: mongodb-org-3.4.9-1.el7.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID a15703c6: NOKEY
################################# [100%]
Updating / installing...
################################# [ 20%]
################################# [ 40%]
################################# [ 60%]
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
################################# [ 80%]
################################# [100%]

21.28 连接mongodb

  • 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挺像
[root@Dasoncheng src]# ll /etc/mongod.conf     ##MongoDB的配置文件;
-rw-r--r-- 1 root root 782 Oct 17 16:20 /etc/mongod.conf
[root@Dasoncheng src]# systemctl start mongod    ##启动mongod
[root@Dasoncheng src]# ps aux |grep mongod   
mongod    38914  2.3  3.5 972180 35500 ?        Sl   16:20   0:00 /usr/bin/mongod -f /etc/mongod.conf
root      38935  0.0  0.0 112664   968 pts/1    S+   16:20   0:00 grep --color=auto mongod
[root@Dasoncheng src]# netstat -lntp |grep mongo
tcp        0      0 192.168.60.11:27017     0.0.0.0:*               LISTEN      38914/mongod        
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      38914/mongod        
[root@Dasoncheng src]# mongo  ##输入mongo直接进去mongo shell里面;
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
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:
……
##警告我们忽略
[root@Dasoncheng src]# mongo --host 192.168.60.11 --port 27017
##远程登录mongo,--host 指定主机ip,--port指定端口;
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.60.11:27017/
MongoDB server version: 3.4.9
Server has startup warnings: 
……
##警告我们忽略

21.29 mongodb用户管理

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"

[root@Dasoncheng src]# mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
> use admin    ##需要切换到admin库里面才能创建用户;切换到库才能创建用户(用户针对库)
switched to db admin
> db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )  
##user: "admin"  //用户名
##customData: {description: "superuser"}  //描述,可不要
##pwd: "admin122" //密码
##roles:  //角色,里面又包含了两个键值对;role: "root"角色是root、db: "admin"针对的是admin库;
Successfully added user: {
	"user" : "admin",
	"customData" : {
		"description" : "superuser"
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
> db.system.users.find()  
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Z69r/apOkJK2zq56nktG3w==", "storedKey" : "vpka49IDqjDTb7tFeRK+YqyCmvA=", "serverKey" : "NNcnjtMeXqmn6SOVspyHtKz/mqU=" } }, "customData" : { "description" : "superuser" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
> db.createUser({user:"aming",pwd:"p@ssw0rd",roles:[{role:"read",db:"testdb"}]})
##创建用户aming 并设为只读;
Successfully added user: {
	"user" : "aming",
	"roles" : [
		{
			"role" : "read",
			"db" : "testdb"
		}
	]
}
> show users   ##查看用户,已经包含了aming
{
	"_id" : "admin.admin",
	"user" : "admin",
	"db" : "admin",
	"customData" : {
		"description" : "superuser"
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
{
	"_id" : "admin.aming",
	"user" : "aming",
	"db" : "admin",
	"roles" : [
		{
			"role" : "read",
			"db" : "testdb"
		}
}
> db.dropUser('aming')    ##删除用户aming
true
> use testdb   ##切换库,若库不存在 则创建!
switched to db testdb
> show users   ##无法查看用户,在哪个库里面创建的用户 就去哪个库查看;
> use admin
switched to db admin
> show users
{
	"_id" : "admin.admin",
	"user" : "admin",
	"db" : "admin",
	"customData" : {
		"description" : "superuser"
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}	

如果要使创建的用户生效,则需要编辑启动脚本:
vim /usr/lib/systemd/system/mongod.service 在OPTIONS=后面增--auth

[root@Dasoncheng src]# vim /usr/lib/systemd/system/mongod.service
Environment="OPTIONS=--auth -f /etc/mongod.conf"
……
[root@Dasoncheng src]# systemctl restart mongod
Warning: mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units.
##看清楚提示!
[root@Dasoncheng src]# systemctl daemon-reload
[root@Dasoncheng src]# systemctl restart mongod
[root@Dasoncheng src]# ps aux |grep mongo
mongod    39100  7.4  3.5 972180 35668 ?        Sl   18:53   0:01 /usr/bin/mongod --auth -f /etc/mongod.conf
##进程这里多了一个--auth验证,用户才会生效
root      39125  0.0  0.0 112664   968 pts/1    S+   18:53   0:00 grep --color=auto mongo
[root@Dasoncheng src]# mongo --host 192.168.60.11 --port 27017 -u admin -p 'admin122' --authenticationDatabase "admin"  
##登录;
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.60.11:27017/
MongoDB server version: 3.4.9
> use admin
switched to db admin
> show users
{
	"_id" : "admin.admin",
	"user" : "admin",
	"db" : "admin",
	"customData" : {
		"description" : "superuser"
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "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")

> use db1
switched to db db1
> db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
Successfully added user: {
	"user" : "test1",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "db1"
		},
		{
			"role" : "read",
			"db" : "db2"
		}
	]
}
> use db2
switched to db db2
> db.auth('test1','123aaa')
Error: Authentication failed.
0
> use db1    ##只有先在db1里面验证身份之后,才能对db2有该有的权限;
switched to db db1
> db.auth('test1','123aaa')
1

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服务器的状态

小说明:创建用户只针对库;

转载于:https://my.oschina.net/u/3651233/blog/1551904

相关文章:

  • WPF入门(一):简单的演示
  • winSockets编程(三)最简单的C/S形式
  • 在 DLL工程中加入新 CFormView时的 注意事项
  • 网络问题排查
  • 游戏中汉字显示的实现与技巧[ZZ]
  • 源码探探之StartActivity(一)
  • 《见与不见》
  • 旅行(LCA)
  • Linux正则表达式元字符
  • AMD首款APU的价值和机会
  • BMap:JavaScript API
  • Java注释讲解
  • Android前景,前途(转)
  • GPU的线程模型和内存模型
  • 深入浅出ShellExecute
  • MySQL数据库运维之数据恢复
  • node和express搭建代理服务器(源码)
  • overflow: hidden IE7无效
  • React-redux的原理以及使用
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 搭建gitbook 和 访问权限认证
  • 回顾2016
  • 将回调地狱按在地上摩擦的Promise
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 数据仓库的几种建模方法
  • 一道闭包题引发的思考
  • 再次简单明了总结flex布局,一看就懂...
  • ​什么是bug?bug的源头在哪里?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • ![CDATA[ ]] 是什么东东
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)springcloud实战之config配置中心
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm码农论坛 毕业设计 231126
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)Java算法:二分查找
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .“空心村”成因分析及解决对策122344
  • .net分布式压力测试工具(Beetle.DT)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET连接MongoDB数据库实例教程
  • /etc/fstab和/etc/mtab的区别
  • @Autowired 与@Resource的区别
  • @Autowired标签与 @Resource标签 的区别
  • [20170705]diff比较执行结果的内容.txt
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [20190416]完善shared latch测试脚本2.txt
  • [codeforces] 25E Test || hash
  • [DAX] MAX函数 | MAXX函数
  • [docker] Docker容器服务更新与发现之consul
  • [linux time命令学习篇] time 统计命令执行的时间
  • [osgearth]通过API创建一个earth模型