在上一篇文章中,我们介绍了如何安装和简单使用 parse-dashboard 以图形化的页面来管理我们的 parse-server 服务。在系统开发中,通常我们需要根据产品的服务和形态来定义我们的数据库表结构,在使用 MySQL 中,我们通常以文件中数据库初始化命令的形式来初始化数据库,以及表结构和字段,而使用 MongoDB 定义好的表结构则通常没有那么简单,在本章节中我们来手把手学习通过 parse-dashboard 来定义我们的数据库结构以及如何进行数据库初始化。
设计表结构
确定字段值
通常我们在接到新的需求之后会对需求进行分析,然后开始设计表结构,现在我们假设需要设计一个用户数据表,存储用户的基本信息:
其中用户表中的字段包括:
| 字段名称 | 数据类型 | 是否必填 | 默认值 |
|---|---|---|---|
| username | String | 是 | Null |
| password | String | 是 | Null |
| avatar | String | 否 | Null |
| phone | String | 是 | Null |
| String | 是 | Null | |
| city | String | 否 | Null |
| country | String | 否 | Null |
| age | Number | 否 | 0 |
| gender | Number | 否 | 0 |
确定好数据表中的字段名称、类型之后,我们就可以结合表结构在 parse-dashboard 中的添加字段值了。
操作示例
- 进入到
parse-dashboard中的User表中
-
点击列表顶部中的
Edit,然后再点击页面中间的Add a column的按钮 -
在弹出的操作框中填入字段的名称,以
phone为例:添加字段的类型为
String, 由于在 JavaScript 中使用 String 类型要占用的存储空间比较小,因此此处的类型选择 String 更为合适;在字段的名称中填入phone,在required选项中选择为Yes -
添加完成字段之后我们可以点击页面中的
Add a row来手动添加一条数据来测试一下然后填入默认已经添加的字段
username、password以及我们自定义的字段phone,然后就可以看到我们已经添加的这条数据,以及在表头中显示了该列数据的数据格式是String
其他的几个字段也可以按照上面的操作创建到 MongoDB 数据库。
Pointer 类型
这样我们就可以通过在 parse-dashboard 的管理台中使用可视化的方式来创建我们的表数据格式,接下来我们可以在上一节中创建的 Game 表中添加一个 user 的字段,声明类型值为 Pointer 指向 User 表
-
然后我们可以看到在
Game表中的user字段默认为undefined -
点击
Game中第一条数据的user表格,就可以将表格变更为一个输入框,输入我们已经创建的用户的objectId -
移开鼠标之后,表格的内容将自动保存到
parse-server的数据库了,同时该表格已经展示为一个链接按钮,点击之后可以直接进入到User表中的该条用户数据,这在日常开发中能够为多个数据表的外联添加了方便的可操作性,能够方便的查看某一条数据所对应的其他表中的数据,这就是parse-server中支持的数据类型Pointer的魅力之处,同时parse-dashboard又将该类型做了优化展示
结构输出
在 parse-dashboard 中使用鼠标点点就可以创建了表结构,那我们怎么查看创建的表的原始数据结构呢?我们可以通过 MongoDB 的命令行工具查看表的解构类型。
-
进入到 MongoDB 的交互式命令行中
mongo -
查看数据库列表
use test; show tables;输出
> use test switched to db test > show tables Game _Idempotency _Role _SCHEMA _Session _User >可以从数据表中看到
parse-server的数据库默认多了几个以下划线开始的表:_Idemotency数据库的索引值_Role角色表,即在parse-dashboard中看到的Role数据表_SCHEMA所有数据表的格式定义,也就是本节中的重要内容_Session用户的登录session表,标识用户的登录状态_User用户表,即在parse-dashboard中看到的User数据表
-
查看数据表的格式定义
_SCHEMAdb.getCollection('_SCHEMA').find().pretty()由于
_SCHEMA使用了下划线开头,因此我们需要使用 MongoDB 提供的getCollection方法来获取到表的实例输出:
{ "_id" : "_User", "objectId" : "string", "updatedAt" : "date", "createdAt" : "date", "username" : "string", "email" : "string", "emailVerified" : "boolean", "authData" : "object", "_metadata" : { "indexes" : { "_id_" : { "_id" : 1 }, "username_1" : { "username" : 1 }, "email_1" : { "email" : 1 }, "case_insensitive_username" : { "username" : 1 }, "case_insensitive_email" : { "email" : 1 } }, "fields_options" : { "phone" : { "required" : true, "defaultValue" : "null" } } }, "phone" : "string" } { "_id" : "_Role", "objectId" : "string", "updatedAt" : "date", "createdAt" : "date", "name" : "string", "users" : "relation<_User>", "roles" : "relation<_Role>", "_metadata" : { "indexes" : { "_id_" : { "_id" : 1 }, "name_1" : { "name" : 1 } } } } { "_id" : "Game", "objectId" : "string", "updatedAt" : "date", "createdAt" : "date", "score" : "number", "cheatMode" : "boolean", "playerName" : "string", "_metadata" : { "indexes" : { "_id_" : { "_id" : 1 } }, "fields_options" : { "user" : { "required" : true } } }, "user" : "*_User" } { "_id" : "_Session", "objectId" : "string", "updatedAt" : "date", "createdAt" : "date", "restricted" : "boolean", "user" : "*_User", "installationId" : "string", "sessionToken" : "string", "expiresAt" : "date", "createdWith" : "object" }可以看到表的数据中的
_id使用了自定义的值,值为所定义的数据表的名称,在_User的数据中,我们能看到定义的phone字段的定义值以及默认值的设置:"fields_options" : { "phone" : { "required" : true, "defaultValue" : "null" } }因此在开发中我们除了可以在
parse-dashboard中添加和修改表结构,我们也可以通过其他的 MongoDB 工具进行原始数据的更改。
备份和恢复
通常在设计完数据库之后,我会将数据库的 _SCHEMA 表完整的备份下来,这样就可以在其他的服务器中初始化我们的数据库结构了。
-
备份
_SCHEMAmongodump -d test -c _SCHEMA -o ./backupMongoDB 的数据库备份通常使用
mongodump命令,表示将数据库指定的数据以Bson的格式全备份。-d表示备份哪一个数据库-c表示备份数据库中的哪一个表-o表示将文件备份在哪一个目录
备份完成后,就可以看到
backup目录下添加了test目录,其中则是备份的_SCHEMA数据 -
恢复
_SCHEMA在我们要初始化的数据库的服务器中,我们需要通过
mongorestore来恢复数据库的_SCHEMA表结构mongorestore -d test -c _SCHEMA --dir ./backup/testmongorestore的参数和mongodump基本类似,不同的是mongorestore的--dir参数来控制备份恢复的文件目录-d表示备份哪一个数据库-c表示备份数据库中的哪一个表--dir备份恢复的文件目录
只要我们能够把 _SCHEMA 的表结构放在项目中,就可以很方便的使用工具来备份和恢复数据了,具体其他的 MongoDB 使用方法和工具可以查看 MongoDB 的官方文档了解更多哦