文章目录
学习前后
上一篇:微信小程序开发之十七 —— 云开发能力
下一篇: 先咕着
云数据库的基础知识
数据库有数据库database、集合collection、记录doc以及字段field,可执行操作有增、删、改、查
数据库权限限制
上一篇末尾我们提到,导入的数据默认权限是仅创建者可读写,那数据库的权限又怎么划分的呢,我们先看一下文档怎么说
官方文档:权限控制
里面分为安全规则与简易权限配置
简易权限配置
上一篇看到的那个权限选项就是简易权限设置,出于易用性和安全性的考虑,云开发为云数据库做了小程序深度整合,在小程序中创建的每个数据库记录都会带有该记录创建者(即小程序用户)的信息,以 _openid 字段保存用户的 openid 在每个相应用户创建的记录中。因此,权限控制也相应围绕着一个用户是否应该拥有权限操作其他用户创建的数据展开。
简易权限级别从宽到紧排列分为四种:
- 仅创建者可写,所有人可读:数据只有创建者可写、所有人可读;比如文章。
- 仅创建者可读写:数据只有创建者可读写,其他用户不可读写;比如用私密相册。
- 仅管理端可写,所有人可读:该数据只有管理端可写,所有人可读;如商品信息。
- 仅管理端可读写:该数据只有管理端可读写;如后台用的不暴露的数据。
安全规则
安全规则的编写更加灵活,官方也建议开发者使用新推出的数据库安全规则取代基础权限配置,可以让数据库访问的行为更加明确。
下面我列举一下新自定义安全规则与旧权限配置的对应关系,更多编写方式可查看官方文档。
我们可以在控制台对各个集合分别配置安全规则,入口在集合权限配置页,在基础的四种权限配置外还提供了 “自定义规则” 的选项。这个是最新版才出的功能,而我的是老早之前就下载的旧版了所以看不到这个入口,但还是可以了解一下。
所有用户可读,仅创建者可写
{
"read": true,
"write": "doc._openid == auth.openid"
}
仅创建者可读写
{
"read": "doc._openid == auth.openid",
"write": "doc._openid == auth.openid"
}
所有用户可读
{
"read": true,
"write": false
}
所有用户不可读写
{
"read": false,
"write": false
}
更多写法请看官方文档,还有很多具体的权限配置:安全规则
数据库查询
先下载个数据中国城市经济数据,然后导入到云开发数据库集合china中,集合名称可自定义,配置好集合权限为"所有人可读,仅创建者可读写"(使用安全规则编写也可,这里我的是旧版所以没法设置安全规则),数据内容是:名称city、省份province、市区面积city_area、建成区面积builtup_area、户籍人口reg_pop、常住人口resident_pop、GDP的数据。
查询指令command
官方文档:Command
指令Command可以分为查询指令和更新指令,这两者的用法有很大的区别,查询指令用于db.collection的where条件筛选,而更新指令则是用于db.collection.doc的update请求的字段的更新里。
查询指令:
gt | 大于 | lt | 小于 |
---|---|---|---|
eq | 等于 | neq | 不等于 |
lte | 小于或等于 | gte | 大于或等于 |
in | 在数组中 | nin | 不在数组中 |
and | 条件与 | or | 条件或 |
not | 条件非 | nor | 都不 |
command指令写法:
比如写大于1000的指令
wx.cloud.database().command.gt(1000)
一般我们会把wx.cloud.database()
赋值给一个变量,一般为db
,然后将db.command()
赋值给_
,最后代码变成_.gt(1000)
,达到简化效果。
逻辑and写法
.where({
province:_.eq("广东")
gdp:_.gt(1000).and(_.lt(10000))
})
where后面会讲,一个刷选数据的方法,这里表示选出广东gdb大于一千小于一万的城市。
逻辑or写法
.where(
{
gdb