Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
9b2831af
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9b2831af
编写于
4月 12, 2021
作者:
DCloud_Heavensoft
提交者:
Gitee
4月 12, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs/uniCloud/hellodb.md.
上级
46af3d01
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
53 deletion
+33
-53
docs/uniCloud/hellodb.md
docs/uniCloud/hellodb.md
+33
-53
未找到文件。
docs/uniCloud/hellodb.md
浏览文件 @
9b2831af
...
...
@@ -23,7 +23,7 @@
上述数据中,每行数据表示一个用户的信息,被称之为“记录(record/doc)”。name和tel称之为“字段(field)”。而“13900000000”则是第一条记录的字段tel的值。
每
个
记录,都是一个完整的json文档,获取到记录后可以使用常规json方式操作。但集合并非json文档,集合是多个json文档的汇总,获取集合需要使用专门的API。
每
行
记录,都是一个完整的json文档,获取到记录后可以使用常规json方式操作。但集合并非json文档,集合是多个json文档的汇总,获取集合需要使用专门的API。
与关系型数据库的二维表格式不同,json文档数据库支持不同记录拥有不同的字段、支持多层嵌套数据。
...
...
@@ -47,6 +47,8 @@ _此处仅为举例,实际业务中,登录日志单独存放在另一个集
对于初学者,如果不了解数据库设计,可以参考
[
opendb
](
https://gitee.com/dcloud/opendb
)
,已经预置了大量常见的数据库设计。
对于不熟悉传统数据库,但掌握json的js工程师而言,uniCloud的云数据库更亲切,没有传统数据库高昂的学习成本。
在uniCloud web控制台新建表时,在下面的模板中也可以选择各种
`opendb`
表模板,直接创建。
**字段的值,支持以下类型:**
...
...
@@ -64,6 +66,8 @@ _此处仅为举例,实际业务中,登录日志单独存放在另一个集
*
Date:时间
*
Null:相当于一个占位符,表示一个字段存在但是值为空。
DB Schema中还扩展了其他字段类型,但其实都是基本类型的扩展,比如file类型其实是一种特殊的object,而password类型是一种特殊的string类型。
uniCloud同时支持阿里云和腾讯云,它们的数据库大体相同,有细微差异。阿里云的数据库是mongoDB4.0,腾讯云则使用自研的文档型数据库(兼容mongoDB 4.0版本)。uniCloud基本抹平了不同云厂商的差异,有差异的部分会在文档中单独标注。
如果想在云函数连接其他数据库,如mysql/redis,用法和nodejs连接这些数据库是一样的。插件市场已经有人提供了插件,见下。但注意这些用法推荐用于数据导入,主业务开发不建议这么使用。因为其他服务器上的数据库和云函数环境物理上不在一起,连接会比较慢。
...
...
@@ -113,15 +117,15 @@ const db = uniCloud.database({
## 创建一个集合/数据表@createCollection
新建的服务空间,没有
一个集合。需要首先创建集合
。
新建的服务空间,没有
数据表。需要首先创建集合/数据表
。
可以在uniCloud的web控制台(
[
https://unicloud.dcloud.net.cn
](
https://unicloud.dcloud.net.cn
)
)在web页面创建
集合,也可以通过代码创建集合
。
可以在uniCloud的web控制台(
[
https://unicloud.dcloud.net.cn
](
https://unicloud.dcloud.net.cn
)
)在web页面创建
数据表,也可以通过代码创建数据表
。
通过代码创建
集合
的方式,阿里云和腾讯云有差别:
通过代码创建
数据表
的方式,阿里云和腾讯云有差别:
-
阿里云
调用add方法,给某
集合新增数据记录时,如果该集合不存在,会自动创建该集合。如下代码给table1集合
新增了一条数据,如果table1不存在,会自动创建。
调用add方法,给某
数据表新增数据记录时,如果该数据表不存在,会自动创建该数据表。如下代码给table1数据表
新增了一条数据,如果table1不存在,会自动创建。
```
js
const
db
=
uniCloud
.
database
();
...
...
@@ -130,7 +134,7 @@ db.collection("table1").add({name: 'Ben'})
-
腾讯云
腾讯云提供了专门的创建
集合
的API,此API仅支持云函数内运行,不支持clientDB调用。
腾讯云提供了专门的创建
数据表
的API,此API仅支持云函数内运行,不支持clientDB调用。
```
js
const
db
=
uniCloud
.
database
();
...
...
@@ -138,18 +142,18 @@ db.createCollection("table1")
```
**注意**
*
如果
集合
已存在,腾讯云调用createCollection方法会报错
*
腾讯云调用collection的add方法不会自动创建
集合,不存在的集合
会报错
*
如果
数据表
已存在,腾讯云调用createCollection方法会报错
*
腾讯云调用collection的add方法不会自动创建
数据表,不存在的数据表
会报错
*
阿里云没有createCollection方法
## 集合的3个组成部分
## 集合
/数据表
的3个组成部分
每个
集合
,其实包含3个部分:
每个
数据表
,其实包含3个部分:
-
data:数据内容
-
index:
数据库
索引
-
index:索引
-
schema:数据表格式定义
在uniCloud的web控制台可以看到一个
集合
的3部分内容。
在uniCloud的web控制台可以看到一个
数据表
的3部分内容。
### 数据内容@dbdata
...
...
@@ -157,63 +161,39 @@ data很简单,就是存放的数据记录(record)。
实际上,创建一条新记录,是不管在web控制台创建,还是通过API创建,每条记录都会自带一个
`_id`
字段用以作为该记录的唯一标志。
`_id`
字段是每个集合默认自带且不可删除的字段。同时,它也是集合的索引。
`_id`
字段是每个数据表默认自带且不可删除的字段。同时,它也是数据表的索引。
### 数据库索引@dbindex
所谓索引,是指在
集合的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度
。
所谓索引,是指在
数据表的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度。但设置过多索引也不合适,会造成数据新增和删除变慢
。
一个
集合
可以有多个字段被设为索引。
一个
数据表
可以有多个字段被设为索引。
索引分唯一型和非唯一型。
唯一型索引要求整个
集合
多个记录的该字段的值不能重复。比如
`_id`
就是唯一型索引。
唯一型索引要求整个
数据表
多个记录的该字段的值不能重复。比如
`_id`
就是唯一型索引。
假使有2个人都叫“张三”,那么他们在user
集合
里的区分就是依靠不同的
`_id`
来区分。
假使有2个人都叫“张三”,那么他们在user
数据表
里的区分就是依靠不同的
`_id`
来区分。
如果我们要根据name字段来查询,为了提升查询速度,此时可以把name字段设为非唯一索引。
还有“组合索引”的概念,可以把多个字段组合成一个“组合索引”。例如一个文章点赞记录明细表,设置文章id和用户id为组合索引,且将此组合索引设为唯一型索引,就可以限制同一用户对一篇文章多次点赞。
索引内容较多,还有“组合索引”、“稀疏索引”、“地理位置索引”、“TTL索引”等概念。有单独的文档详细讲述索引,另见:
[
数据库索引
](
/uniCloud/db-index
)
**在web控制台添加上述索引**
![](
https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-dc-site/fca53140-1d91-11eb-880a-0db19f4f74bb.jpg
)
**在db_init.json内添加上述索引**
```
json
{
"opendb-news-article"
:
{
"data"
:
[],
"index"
:[{
"IndexName"
:
"user_article_"
,
//
索引名称
"MgoKeySchema"
:
{
//
索引规则
"MgoIndexKeys"
:
[{
"Name"
:
"user_id"
,
//
索引字段
"Direction"
:
"1"
//
索引方向,
1
:ASC-升序,
-1
:DESC-降序,
2
dsphere:地理位置
},{
"Name"
:
"article_id"
,
//
索引字段
"Direction"
:
"1"
//
索引方向,
1
:ASC-升序,
-1
:DESC-降序,
2
dsphere:地理位置
}],
"MgoIsUnique"
:
false
//
索引是否唯一
}
}]
}
}
```
**注意**
-
如果记录中已经存在多个记录某字段相同的情况,那么将该字段设为唯一型索引会失败。
-
如果已经设置某字段为唯一索引,在新增和修改记录时如果该字段的值之前在其他记录已存在,会失败。
-
假如记录中不存在某个字段,则对索引字段来说其值默认为 null,如果该索引字段设为唯一型索引,则不允许存在两个或以上的该字段为null或不存在该字段的记录。
#### 稀疏索引
-
假如记录中不存在某个字段,则对索引字段来说其值默认为 null,如果该索引字段设为唯一型索引,则不允许存在两个或以上的该字段为null或不存在该字段的记录。此时需要设置稀疏索引来解决多个null重复的问题
[
文档已移至
](
uniCloud/db-index.md?id=sparse
)
### 数据表格式定义@dbschema
`DB Schema`
是集合的表结构描述。描述
集合
有哪些字段、值域类型是什么、是否必填、数据操作权限等很多内容。
`DB Schema`
是集合的表结构描述。描述
数据表
有哪些字段、值域类型是什么、是否必填、数据操作权限等很多内容。
因为json文档数据库的灵活性,data数据的字段可以不在schema的描述范围内。
...
...
@@ -224,23 +204,23 @@ data很简单,就是存放的数据记录(record)。
## 获取集合/数据表对象
创建好
集合后,可以通过API获取集合
对象。
创建好
数据表后,可以通过API获取数据表
对象。
```
js
const
db
=
uniCloud
.
database
();
// 获取名为 `table1`
集合
的引用
// 获取名为 `table1`
数据表
的引用
const
collection
=
db
.
collection
(
'
table1
'
);
```
**集合 Collection 的方法**
**集合
/数据表
Collection 的方法**
通过
`db.collection(name)`
可以获取指定
集合的引用,在集合
上可以进行以下操作
通过
`db.collection(name)`
可以获取指定
数据表的引用,在数据表
上可以进行以下操作
| 类型 | 接口 | 说明 |
| -------- | ------- | ---------------------------------------------------------------------------------- |
| 写 | add | 新增记录(触发请求) |
| 计数 | count | 获取符合条件的记录条数 |
| 读 | get | 获取
集合
中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求) |
| 引用 | doc | 获取对该
集合
中指定 id 的记录的引用 |
| 读 | get | 获取
数据表
中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求) |
| 引用 | doc | 获取对该
数据表
中指定 id 的记录的引用 |
| 查询条件 | where | 通过指定条件筛选出匹配的记录,可搭配查询指令(eq, gt, in, ...)使用 |
| | skip | 跳过指定数量的文档,常用于分页,传入 offset。clientDB组件有封装好的更易用的分页,
[
另见
](
uniCloud/uni-clientdb-component
)
|
| | orderBy | 排序方式 |
...
...
@@ -284,7 +264,7 @@ uniCloud数据库提供了多种数据导入导出和备份方案。
-
db_init.json位置由
`cloudfunctions/db_init.json`
移至
`uniCloud/database/db_init.json`
-
schema不再放在db_init.json内,每个表都有一个单独的schema文件,比如news表对应的schema为
`uniCloud/database/news.schema.json`
-
schema可以在
`uniCloud/database`
目录上右键创建
-
db_init.json
文件右键初始化云数据库时依然会带上schema进行数据库的初始化,除schema外HBuilderX3.0.0以上版本使用db_init.json初始化数据库还会带上扩展校验函数,扩展校验函数位于
`uniCloud/database/validateFunction`
目录下,扩展校验函数文档详见:
[
validateFunction
](
https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction
)
-
`db_init.json`
文件右键初始化云数据库时依然会带上schema进行数据库的初始化,除schema外HBuilderX3.0.0以上版本使用db_init.json初始化数据库还会带上扩展校验函数,扩展校验函数位于
`uniCloud/database/validateFunction`
目录下,扩展校验函数文档详见:
[
validateFunction
](
https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction
)
**HBuilderX 3.0.0版本之前的db_init.json示例**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录