Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoderSmallfan
uni-app
提交
b5895367
U
uni-app
项目概览
CoderSmallfan
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b5895367
编写于
10月 24, 2020
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: clientDB
上级
d55f18af
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
40 addition
and
47 deletion
+40
-47
docs/uniCloud/database.md
docs/uniCloud/database.md
+39
-47
docs/uniCloud/quickstart.md
docs/uniCloud/quickstart.md
+1
-0
未找到文件。
docs/uniCloud/database.md
浏览文件 @
b5895367
...
...
@@ -74,12 +74,12 @@ clientDB云端默认返回值形式如下,开发者可以在action的after内
|TOKEN_INVALID |token校验未通过(云端已不包含此token) |
|TOKEN_INVALID_TOKEN_EXPIRED |token校验未通过(token已过期) |
|TOKEN_INVALID_WRONG_TOKEN |token校验未通过(token校验未通过) |
|SYNTAX_ERROR |
db-permission语法错误
|
|SYNTAX_ERROR |
语法错误
|
|PERMISSION_ERROR |权限校验未通过 |
|VALIDATION_ERROR |数据格式未通过 |
|SYSTEM_ERROR |系统错误 |
### 变量@variable
###
前端环境
变量@variable
clientDB目前内置了3个变量可以供客户端使用,客户端并非直接获得这三个变量的值,而是需要传递给云端,云数据库在数据入库时会把变量替换为实际值。
...
...
@@ -91,6 +91,13 @@ clientDB目前内置了3个变量可以供客户端使用,客户端并非直
使用这些变量,将可以避免过去在服务端代码中写代码获取用户uid、时间和客户端ip的麻烦。
```
js
const
db
=
uniCloud
.
database
()
let
res
=
await
db
.
collection
(
'
table
'
).
where
({
user_id
:
db
.
env
.
uid
// 查询当前用户的数据
}).
get
()
```
### JQL查询语法@jsquery
`jql`
,全称javascript query language,是一种js方式操作数据库的语法规范。
...
...
@@ -202,15 +209,15 @@ db.collection('list')
</uni-clientdb>
```
**jql条件语句内
可以使用的
变量**
**jql条件语句内变量**
|变量名 |说明 |
|:-: |:-: |
|auth.uid |用户id |
|auth.role |用户角色数组,参考
[
uni-id 角色权限
](
/uniCloud/uni-id?id=rbac
)
,注意
`admin`
为clientDB内置的角色,如果用户角色列表里包含
`admin`
则认为此用户有完全数据访问权限|
|auth.permission|用户权限数组,参考
[
uni-id 角色权限
](
/uniCloud/uni-id?id=rbac
)
|
|now |当前时间戳(单位:毫秒),时间戳可以进行额外运算,如publish
\_
date > now - 60000表示publish
\_
date在最近一分钟 |
以下变量同
[
前端环境变量
](
uniCloud/database.md?id=variable
)
|参数名 |说明 |
|:-: |:-: |
|$env.uid |用户uid,依赖uni-id|
|$env.now |服务器时间戳 |
|$env.clientIP|当前客户端IP |
**jql条件语句的运算符**
...
...
@@ -232,8 +239,6 @@ db.collection('list')
具体到这个正则
`/abc/.test(content)`
,类似于sql中的
`content like %abc%`
### JQL联表查询扩展@lookup
`JQL`
提供了更简单的联表查询方案。不需要学习join、lookup等复杂方法。
...
...
@@ -269,6 +274,10 @@ book表内有以下数据,title为书名、author为作者:
order表内有以下数据,book字段为book表的书籍_id,quantity为该订单销售了多少本书:
**注意编写查询条件时,除test外均为运算符左侧为数据库字段右侧右侧为常量**
### 联表查询扩展@lookup
```
js
{
"
book
"
:
"
1
"
,
...
...
@@ -307,7 +316,7 @@ order表内有以下数据,book字段为book表的书籍_id,quantity为该
"properties"
:
{
"book"
:
{
"bsonType"
:
"string"
,
"foreignKey"
:
"book._id"
"foreignKey"
:
"book._id"
//
使用foreignKey表示,此字段关联book表的_id。
},
"quantity"
:
{
"bsonType"
:
"int"
...
...
@@ -564,6 +573,14 @@ permission规则,可以对整个表的增删改查进行控制,也可以针
"
.read
"
:
false
,
// 禁止读取secret_field字段的数据
"
.write
"
:
false
// 禁止写入(包括更新和新增)secret_field字段的数据,父级节点存在false时这里可以不配
}
},
"
uid
"
:{
"
bsonType
"
:
"
string
"
,
// 字段类型
"
foreignKey
"
:
"
uni-id-users._id
"
},
"
book_id
"
:
{
"
bsonType
"
:
"
string
"
,
// 字段类型
"
foreignKey
"
:
"
book._id
"
}
}
}
...
...
@@ -578,6 +595,12 @@ permission规则,可以对整个表的增删改查进行控制,也可以针
"
.read
"
:
"
doc.status == 'OnSell'
"
// 允许所有人读取状态是OnSell的数据
},
"
properties
"
:
{
// 字段列表,注意这里是对象
"
title
"
:
{
"
bsonType
"
:
"
string
"
},
"
author
"
:
{
"
bsonType
"
:
"
string
"
},
"
secret_field
"
:
{
// 字段名
"
bsonType
"
:
"
string
"
,
// 字段类型
"
permission
"
:
{
// 字段权限
...
...
@@ -596,43 +619,12 @@ const db = uniCloud.database()
const
dbCmd
=
db
.
command
const
$
=
dbCmd
.
aggregate
db
.
collection
(
'
order
'
)
.
aggregate
()
// 此match方法内的条件会和order表对应的权限规则进行校验
.
match
({
uid
:
db
.
env
.
uid
})
// 此project方法是为了确定查询需要访问order表的哪些字段
.
project
({
_id
:
true
,
book_id
:
true
})
.
lookup
({
from
:
'
book
'
,
let
:
{
book_id
:
'
$book_id
'
},
pipeline
:
$
.
pipeline
()
// 此match方法内的条件会和book表对应的权限规则进行校验,{status: 'OnSell'}会参与校验,整个expr方法转化成一个不与任何条件产生交集的特别表达式。这里如果将dbCmd.and换成dbCmd.or会校验不通过
.
match
(
dbCmd
.
and
([
{
status
:
'
OnSell
'
},
// 指定book表的_id等于order表的book_id
dbCmd
.
expr
(
$
.
eq
([
'
$_id
'
,
'
$$book_id
'
])
)
]))
// 此project方法是为了确定查询需要访问book表的哪些字段
.
project
({
book_name
:
true
})
.
done
()
})
.
end
()
.
where
(
'
uid == $env.uid && book_id.status == "OnSell"
'
)
.
field
(
'
uid,book_id{title,author}
'
)
.
get
()
```
**权限规则
内可以使用的全局
变量**
**权限规则变量**
|变量名 |说明 |
|:-: |:-: |
...
...
docs/uniCloud/quickstart.md
浏览文件 @
b5895367
...
...
@@ -245,6 +245,7 @@ uniCloud的[web控制台](https://unicloud.dcloud.net.cn/)可以查看线上云
|阿里云 |api.bspapp.com |bsppub.oss-cn-shanghai.aliyuncs.com|需要从云存储下载文件的时候才需要配置,不同服务空间域名不同,可以在web控制台查看文件详情里面看到|
|腾讯云 |tcb-api.tencentcloudapi.com|cos.ap-shanghai.myqcloud.com |需要从云存储下载文件的时候才需要配置,不同服务空间域名不同,可以在web控制台查看文件详情里面看到|
**如果需要用uni.request请求云存储内的文件,需要将云存储域名(即上表中的download合法域名)配置到request合法域名内**
小程序开发工具的真机预览功能,必须添加上述域名白名单,否则无法调用云函数。模拟器的PC端预览、真机调试不受此影响。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录