mongodb安装配置和Shell指令

mongodb安装配置和Shell指令

安装

1
vi /etc/yum.repos.d/mongodb-org-3.2.repo
1
2
3
4
5
6
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
1
yum -y install mongodb-org
1
2
3
4
5
6
[root@vultr ~]# rpm -qa |grep mongodb
mongodb-org-tools-3.2.20-1.el7.x86_64
mongodb-org-mongos-3.2.20-1.el7.x86_64
mongodb-org-server-3.2.20-1.el7.x86_64
mongodb-org-3.2.20-1.el7.x86_64
mongodb-org-shell-3.2.20-1.el7.x86_64

###内存限制:

vim /etc/mongod.conf

增加

1
2
3
wiredTiger:
engineConfig:
configString : cache_size=256M

增加管理账户

1.增加管理账户

Mongodb推荐创建一个只能管理用户的用户来做角色权限分配工作:userAdminAnyDatabase
该账号只有用户管理权限,并未其分配数据库相关读、写权限。

1
2
3
4
5
6
7
8
9
10
mongo
use admin
db.createUser(
{
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

2.退出mongod 服务

1
systemctl stop mongod.service

3.启动授权模式

vim /etc/mongod.conf

增加

1
2
security:
authorization: enabled

4.重新启动mongod服务

systemctl start mongod.service

5.启动授权模式验证

这时候 mongo 进去,执行相关的指令,都会产生以下提示:

1
2
3
4
5
6
7
8
9
10
11
[root@vultr ~]# mongo
MongoDB shell version: 3.2.20
connecting to: test
> use admin
switched to db admin
> show dbs;
2018-09-05T14:10:03.269+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} :

6.如何授权使用

1
2
3
4
mongo
use admin
db.auth('username','password')
授权成功返回为 1

或者

mongo -u admin -p –authenticationDatabase admin

1
2
3
4
5
6
7
8
[root@vultr ~]# mongo -u admin -p --authenticationDatabase admin
MongoDB shell version: 3.2.20
Enter password:
connecting to: test
> show dbs;
admin 0.000GB
local 0.000GB
pythondb 0.000GB

但是admin账号只有用户管理权限,并未其分配数据库相关读、写权限

为数据库创建用户

1
use DATABASE_NAME #如果数据库不存在,则创建数据库,否则切换到指定数据库。

创建test用户,该用户具有对 zsxq 读写权限,对pythondb 库有读权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use zsxq
db.createUser({user:"sloong",pwd:"xxxxx",roles:[{ role: "readWrite",db: "database" },{ role: "readWrite",db: "zsxq" }]})
> show users
{
"_id" : "zsxq.sloong",
"user" : "sloong",
"db" : "zsxq",
"roles" : [
{
"role" : "readWrite",
"db" : "pythondb"
},
{
"role" : "readWrite",
"db" : "zsxq"
}
]
}
> use zsxq
switched to db zsxq
> db.auth('sloong','xxxxxt')
1
> db.zsxq.insert({"test":"hello world! by longguang"})
WriteResult({ "nInserted" : 1 })
> show collections
zsxq

内建的角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

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

作者:山鬼谣me
来源:CSDN
原文:https://blog.csdn.net/u013066244/article/details/53874216
版权声明:本文为博主原创文章,转载请附上博文链接!

###启动

1
/etc/init.d/mongod start

查看进程 端口

1
netstat -nltp|grep mongo

mongo shell:

mongo

db.version()

常用shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
show dbs
use db_name
show collections
db.[collection].find()
db.[collection].find({param1:value}).sort({'key',-1}).limit(10)
db.[collection].findOne()
db.[collection].count()
//distinct操作,查询指定列,去重复
db.foo.distinct('msg')
//”>=”操作
db.foo.find({"timestamp": {"$gte" : 2}})
//子对象的查找
db.foo.find({'address.city':'beijing'})
db.[collection].update({查询条件},{$set:{更新内容}})
db.[collection].remove({删除条件})
db.[collection].drop()
db.dropDatabase()

高级查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
https://blog.csdn.net/yczz/article/details/5974235
查询 name <> "bruce" and age >= 18 的数据
db.users.find({name: {$ne: "bruce"}, age: {$gte: 18}});
查询 creation_date > '2010-01-01' and creation_date <= '2010-12-31' 的数据
db.users.find({creation_date:{$gt:new Date(2010,0,1), $lte:new Date(2010,11,31)});
查询 age in (20,22,24,26) 的数据
db.users.find({age: {$in: [20,22,24,26]}});
查询 age取模10等于0 的数据
db.users.find('this.age % 10 == 0');
或者
db.users.find({age : {$mod : [10, 0]}});
匹配所有
db.users.find({favorite_number : {$all : [6, 8]}});
可以查询出{name: 'David', age: 26, favorite_number: [ 6, 8, 9 ] }
可以不查询出{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }
查询不匹配name=B*带头的记录
db.users.find({name: {$not: /^B.*/}});
查询 age取模10不等于0 的数据
db.users.find({age : {$not: {$mod : [10, 0]}}});
#返回部分字段
选择返回age和_id字段(_id字段总是会被返回)
db.users.find({}, {age:1});
db.users.find({}, {age:3});
db.users.find({}, {age:true});
db.users.find({ name : "bruce" }, {age:1});
0为false, 非0为true
选择返回age、address和_id字段
db.users.find({ name : "bruce" }, {age:1, address:1});
排除返回age、address和_id字段
db.users.find({}, {age:0, address:false});
db.users.find({ name : "bruce" }, {age:0, address:false});
数组元素个数判断
对于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }记录
匹配db.users.find({favorite_number: {$size: 3}});
不匹配db.users.find({favorite_number: {$size: 2}});
$exists判断字段是否存在
查询所有存在name字段的记录
db.users.find({name: {$exists: true}});
查询所有不存在phone字段的记录
db.users.find({phone: {$exists: false}});
$type判断字段类型
查询所有name字段是字符类型的
db.users.find({name: {$type: 2}});
查询所有age字段是整型的
db.users.find({age: {$type: 16}});
对于字符字段,可以使用正则表达式
查询以字母b或者B带头的所有记录
db.users.find({name: /^b.*/i});
坚持原创技术分享,您的支持将鼓励我继续创作!
分享