* 文档
文档是MongoDB的核心概念,文档就是键值对的一个有序集
文档一般有多个键值对,一个文档中的值可以有多种不同的数据类型,文档中的键是字符串,键不能含有空字符$
注意
1)MongoDB不但要区分类型,也要区分大小写
2)MongoDB的文档不能有重复的键
3)文档中的键值对是有序的
* 集合
集合是一组文档,如果将MongoDB中一个文档看作关系型数据库的一行,那么一个集合就相当于一张表
动态集合:
特点:
集合里面的文档可以是各式各样的
我们会把相关类型的文档组合在一起
* 命名
1)集合名的命名满足如下条件
不能是空字符串
不能包含空字符
不能以system.开头
不能在集合名中含有$字符
2)子集合
组织集合的一种惯例是使用"."来分隔不同命名空间的子集合。
* 数据库
在MongoDB中,多个文档合成集合,多个集合组合成数据库,一个mongoDB实例中可以含有多个数据库,每个数据库可以含有多个集合,每个数据库有独立的权限,不同的数据库存储在不同的文件中。
二)mongod的常用选项
* fork={true|false} mongod是否允许在后台
* bind_ip 指定监听地址
* port 27017
* maxConns 最大的并发连接数,默认为1000000
* logappend 有这些才能实现日志滚动
* --slowms arg (=100) 慢查询,多少时间才判断为慢查询
*
三)Mongodb安全
https://docs.mongodb.com/manual/reference/built-in-roles/
安全参考:
1、内置角色
数据库用户角色
* read 提供对所有读取数据的能力
![](https://box.kancloud.cn/25a3df4534ab0516aecc20c67a63be23_735x209.png)
* readWrite:提供read角色的所有权限
数据库管理角色
![](https://box.kancloud.cn/b80442402d340112f98ee7895045d3f7_858x489.png)
群集管理角色
![](https://box.kancloud.cn/12265c5527c6af75453569e7d2d5be13_893x566.png)
备份和恢复角色
![](https://box.kancloud.cn/43d052ec8c78bc784b0c305a16586934_894x383.png)
1)启用身份验证
* 创建用户
> use admin
switched to db admin
> db.createUser({user: "mytest",pwd:"abc123",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
Successfully added user: {
"user" : "mytest",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
创建用户管理员。
在admin数据库中,添加具有userAdminAnyDatabase角色的用户
* 修改配置文件/etc/mongod.conf
#security:
security:
authorization: enabled
然后重启mongod(systemctl restart mongod)
[root@node1 ~]# mongo --host 10.2.13.187 --port 27017 -u "mytest" -p "abc123" --authenticationDatabase "admin"
* 然后创建一个授权,授权用户myTester可以对person和foo数据库的权限
*> db.createUser({user:"myTester",pwd:"xyz123",roles:[{role:"readWrite",db:"person"},{role:"readWrite",db:"foo"}]})
Successfully added user: {
"user" : "myTester",
"roles" : [
{
"role" : "readWrite",
"db" : "person"
},
{
"role" : "readWrite",
"db" : "foo"
}
]
}
然后测试
~~~
[root@node1 ~]# mongo --host 10.2.13.187 --port 27017 -u "myTester" -p "xyz123"
MongoDB shell version v3.6.3
connecting to: mongodb://10.2.13.187:27017/
MongoDB server version: 3.6.3
> show dbs (报错,发现没有权限)
2018-03-09T16:53:34.174+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:816:19
shellHelper@src/mongo/shell/utils.js:706:15
@(shellhelp2):1:1
> use foo
switched to db foo
> show collections;
blog
email
foo
games
> db.foo.find()
{ "_id" : ObjectId("5a97a6d0c51b3387784da133"), "name" : "joe", "age" : 35 }
{ "_id" : ObjectId("5a97a6dec51b3387784da134"), "name" : "alex", "age" : 30 }
{ "_id" : ObjectId("5a97a6e2c51b3387784da135"), "name" : "yuki", "age" : 20 }
{ "_id" : ObjectId("5a97a6e7c51b3387784da136"), "name" : "louis", "age" : 20 }
> use person
switched to db person
> show collections;
classes
foo.batchinsert
food
mycoll
person
products
records
> db.mycoll.find()
{ "_id" : ObjectId("5aa0c8890f4928baa57db04d"), "name" : "louis", "age" : 20 }
{ "_id" : ObjectId("5aa0c8a20f4928baa57db04e"), "name" : "alex", "age" : 22 }
{ "_id" : ObjectId("5aa0c8ac0f4928baa57db04f"), "name" : "yuki", "age" : 27 }
~~~