1.案例需求
存放文章评论的数据存放到MongoDB中,数据结构参考如下:
数据库:articledb
专栏文章评论 | comment | ||
字段名称 | 字段含义 | 字段类型 | 备注 |
_id | ID | ObjectID或String | Mongo的主键字段 |
articleid | 文章ID | String | |
content | 评论内容 | String | |
userid | 评论人ID | String | |
nickname | 评论人昵称 | String | |
createdtime | 评论的日期时间 | Date | |
likenum | 点赞数 | Int32 | |
replynum | 回复数 | Int32 | |
state | 状态 | String | 0:不可见;1:可见; |
parentid | 上级ID | String | 如果为0表示文章的顶级评论 |
2.数据库操作
2.1 选择和创建数据库
选择和创建数据库的语法格式: | use 数据库名称 |
注意:如果数据库不存在则自动创建,例如,我们创建articledb数据库: | use articledb |
查看有权限查看的所有数据库的命令: | show dbs / show databases |
查看当前正在使用的数据库命令: | db |
问题:大家如果尝试了use articledb命令后,会发现我的库不是已经创建了吗,为什么执行show dbs 不会显示出来呢?例如:
解答:因为这和mongodb的存储机制有关,可以把mongodb存储机制看成两部分,如图:
当使用 use articledb
的时候. articledb
其实存放在内存之中, 当 articledb
中存在一个 collection 之后, mongo 才会将这个数据库持久化到硬盘之中.
特别强调一点: 在MongoDB中,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建!
拓展:
数据库命名可以是满足以下条件的任意utf-8字符串
- 不能是空字符串""
- 不能含有' ' 、空格、.、$、/、\
- 应全部小写,最多64个字节
接下来的这个问题,想必大家也有和我一样的疑惑?如下的这三个默认库,有什么作用呢?
其实,有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库
- admin: 从权限角度考虑, 这是
root
数据库, 如果将一个用户添加到这个数据库, 这个用户自动继承所有数据库的权限, 一些特定的服务器端命令也只能从这个数据库运行, 比如列出所有的数据库或者关闭服务器 - local: 数据永远不会被复制, 可以用来存储限于本地的单台服务器的集合 (部署集群, 分片等)
- config: Mongo 用于分片设置时,
config
数据库在内部使用, 用来保存分片的相关信息
2.2 数据库分配用户
db.system.users.remove({user:"用户名"}) 注意:需要在admin库下执行语句 | 删除数据库用户 |
db.createUser({user:'root',pwd:'root',roles:[{ "role" : "root", "db" : "odi" }]}); 解释: 用户:root 密码:root 角色:root 数据库:odi 注意:需要在当前库下执行语句 例如 odi库 ,就在odi库下创建用户 | 创建数据库用户,设置账号、密码、权限、数据库(具体库名) |
2.3 用户分配角色
read | 只读权限 |
readWrite | 读写库的权限 |
dbAdmin | 某数据库管理权限 |
userAdmin | 某数据库用户的管理权限,包括创建用户,授权的管理 |
dbOwner | 某数据库的所有者,拥有该库的所有权限,包括readWrite,dbAdmin和userAdmin权限 |
readAnyDatabase | 所有数据库角色 |
root | 超级用户角色 |
2.4 数据库的删除
Mongodb删除数据库的语法格式如下: | db.dropDatabase() |
提示:主要用来删除已经持久化的数据库!
3.集合操作
集合,类似于关系型数据库中的表,可以显示创建,也可以隐示的创建!
3.1 集合的显示创建
基本语法格式: | 参数说明: |
db.createCollection(name); 查看当前库中的表: show tables | name:要创建的集合名称 |
3.2 集合的隐示创建
3.3 集合的删除
基本语法格式: | 返回值说明: |
db.collection.drop();其中collection是集合的名称; 查看当前库中的表: show tables | true 删除成功,false 删除失败 |