多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 文档 文档是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 } ~~~