一、云数据库介绍
uniCloud
云空间提供了一个 JSON 格式的文档型数据库。
- 一个
uniCloud
服务空间,有且只有一个数据库 database; - 一个数据库可以有多个表,表在这里也称之为集合collection ;
- 一个表可以有多个记录,记录在这里称之为record或者doc;
- 一个记录可以有多个字段,字段称为filed。
二、云数据库搭建
当我们创建后云空间的时候,数据库其实也帮我们创建好了。

三、数据表创建
数据表有两种创建方式,一种是在云空间操作平台上直接创建,另外一种是在HBuilderX中新建数据表创建,这里建议使用第二种,因为具有更好的代码提示。
3.1 DB Schema 介绍
DB Schema
是基于 JSON 格式定义的数据结构的规范。
每张表/集合,都有一个表名.schema.json的文件,来描述表的信息、字段的信息。
json
{
"bsonType": "object", // 固定节点
"description": "该表的描述",
"permission":[],// 表权限
"required": [], // 必填字段列表
"properties": { // 该表的字段清单
"_id": { // 字段名称,每个表都会带有_id字段,
"description": "ID,系统自动生成"
// 这里还有很多字段属性可以设置
},
"title": {
"bsonType": "string", // 字段类型
"description": "文章的标题",
"title": "标题", // 用于 unicloud-db 前端组件显示的字段
"defaultValue":"默认值", // 默认值
"minLength": 2,
"maxLength": 20
},
}
}
常见的bsonType类型:
- bool:布尔值,true|false
- string:字符串
- password:一种特殊的string。这类字段不会通过clientDB传递给前端,
- int:整数
- double:精度数。由于浮点精度问题,慎用
- object:json对象。地理位置也属于object
- file:一种特殊的object,固定格式存放云存储文件的信息。不直接存储文件,而是一个json object,包括云存储文件的名称、路径、文件体积等信息。
- array:数组
- timestamp:时间戳
- date:日期
3.2 新建数据表
- 可以直接在HBuilderX中新建数据表,如图所示

- 填写表名 book

- 根据需求填写表字段
json
// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"title": {
"bsonType": "string",
"description": "文章的标题",
"title": "标题",
"minLength": 2,
"maxLength": 20
},
"thumb": {
"bsonType": "string",
"description": "文章封面大图",
"title": "封面图片",
"defaultValue": ""
},
"category": {
"bsonType": "int",
"enum": [{
"text": "全部",
"value": 0
},
{
"text": "精华",
"value": 1
},
{
"text": "分享",
"value": 2
}
]
}
}
}
3.3 上传数据表
当编辑好数据表后,需要将数据表上传到云空间,这一步才算是完成了数据表的搭建操作。

成功后,刷新云端空间,发现多了一个数据表 **book ,**至此数据表上传成功。

四、JQL基本语法
uniCloud建立了JQL(javascript query language)语法规范,是一种用js语法操作数据库的规范。
4.1 HBuilderX运行JQL
HBbuilderX中支持编写JQL语法直接操作数据库,下面围绕着数据库的传统操作CRUD-增删改查来演示。
在HBuilderX中,找到database目录下的文件 JQL查询.jql,该文件支持运行JQL语法,如图所示。

选中要运行的代码,按下F5,或者鼠标右键 执行JQL查询语句 即可。

因为还没有新增数据,所以这里查询的结果是空。

4.2 JQL 新增
新增主要通过add方法,然后根据book的类型结构传入一个对象即可,id可以不传。
javascript
db.collection('book').add({
title: "新闻1",
thumb: "xx",
category: 0
})
4.3 JQL 查询
查询主要使用的时候get方法。
javascript
db.collection('book').get();
4.4 JQL 修改
修改之前需要通过doc,或者where指定查询条件的方式,确定要修改的数据,再使用的是update的方法进行修改。
javascript
db.collection('book').doc("67b6888b21821b610d4ef217").update({
title: "新闻2",
thumb: "xxx",
category: 2
})
db.collection('book').where({
_id: "67b6888b21821b610d4ef217"
}).update({
title: "新闻3",
thumb: "xxx",
category: 1
})
4.5 JQL 删除
删除元素也是需要先确定要删除的元素,然后调用remove方法进行删除
javascript
db.collection('book').doc("67b6888b21821b610d4ef217").remove()
五、客户端操作数据库
uniCloud提供了直接在客户端操作数据库的技术,称为clientDB,省去了传统的需要借助后端服务器去操作数据库的步骤,使客户端操作数据库更加的方便和高效了。clientDB也是采用了JQL的语法。
- 引入database
javascript
// 获取云数据库对象引用
const db = uniCloud.database();
- 操作数据表
javascript
// 查询
db.collection('book').get()
// 新增
db.collection('book').add({ title: '体育', category: 2, thumb: 'xxx' })
// 编辑
db.collection('book').doc(id).update({ title: '体育', category: 2, thumb: 'xxx' })
// 删除
db.collection('book').doc(id).remove()