2. uniCloud 进阶基础之 DBSchema 、JQL语

2023-06-08  本文已影响0人  CeaCrab

1. 云对象操作数据库

创建云对象

创建云对象

云对象操作数据库

服务端链接表返回 客户端调用拿到数据 传参

2. DB Schema**

客户端直接操作数据库,会报错

Schema 本地和云端上传下载

解决报错,下载 DB Schema,会把所有表下载下来

新建表

新建 demoColud 链接新表,报错匿名身份,这是安全限制,需要校验身份 这里读写更新删除,现在直接开启,先不校验,可以打开解决匿名身份报错,可以看到返回的内容,空表没有数据

关于 Schema 的表结构

自定义一个 Schema

{
    "bsonType": "object",
    "required": [],
    "permission": {  // 这里即使开启,字段中也可以二次限制读写更新删除
        "read": true,
        "create": true,
        "update": false,
        "delete": false
    },
    "properties": {
        "_id": {
            "description": "ID,系统自动生成"
        },
        "title": {
            "bsonType": "string",
            "title": "文章标题",
            "description": "文章的标题"
        },
        "content": {
            "bsonType": "string",
            "title": "内容",
            "description": "文章的内容"
        },
        "posttime": {
            "bsonType": "timestamp",
            "title": "发布时间",
            "description": "文章内容",
            "defaultValue": {
                "$env": "now"
            }
        },
        "hits": {
            "bsonType": "int",
            "title": "阅读量",
            "defaultValue": 30
        }
    }
}

新增

新增

如果没有添加标题也可以新增,前端需要校验下,这里后端处理下,我们再必填选项中把title放入即可,这样如果没有添加标题就会提示

{
    "bsonType": "object",
    "required": ["title"], // 这里必填字段
    "permission": {
        "read": true,
        "create": true,
        "update": false,
        "delete": false
    },
....
}

不传数据验证

验证title必填项后报错 配置错误信息 前端校验显示错误信息

2. JQL 操作数据库

学习 JQL 语法必须了解 DB Schema

新建表

{
    "bsonType": "object",
    "required": [],
    "permission": {
        "read": true,
        "create": true,
        "update": false,
        "delete": true
    },
    "properties": {
        "_id": {
            "description": "ID,系统自动生成"
        },
        "name": {
            "bsonType": "string",
            "description": "姓名",
            "minLength": 2,
            "maxLength": 10
        },
        "age": {
            "bsonType": "int",
            "description": "年龄",
            "minimum": 0,
            "maximum": 120
        },
        "tel": {
            "bsonType": "string",
            "description": "电话号码"
        },
        "email": {
            "bsonType": "string",
            "description": "邮箱地址"
        },
        "posttime": {
            "bsonType": "timestamp",
            "description": "添加时间",
            "defaultValue": {
                "$env": "now"
            }
        }
    }
}
JQL语法和传统语法对比查询

3. openDB

内置的各种表,目前openDB已经支持几十张表。点击查看

常用表

4. 引入 uni-id

uni-id-pages

导入

下载时需要点击注册合并,会把页面自动导入到我们项目,这时候运行会报错,需要重启下。

会在 uni-modules 目录下,登录等页面 登录页面 注册报错,需要配置 config 根据教程新建json文件 配置文件,这里密码规则什么的需要配置下,随便写点字母,这样注册就可以了 注册信息已经在数据库中

5. DBschema 与 uni-id 配合使用

关联表

foreignKey 关联关系 关联使用 用户身份 上图补充 发布文章 uid 关联上了

DBSchema 表验证问题

验证 限制非登录用户读写

用户退出登录

相对于聚合,JQL 联表查询语法更简单

联表查询 因为会拿到用户的所有信息,包括密码,所以这里会报错,我们需要过滤字段,拿到想要的字段即可 副表中想读取name和头像等开启权限 查询主表title等和副标用户名字头像等 返回结果 渲染结果 头像层级 字段别名 单条件排序和多条件判断排序

查询一条数据的时候,本来就一个对象还是被数组包括,这里可以在 get 开启 getOne 来获取对象,不要数组。

查询一条数据,一般用于详情页
上一篇下一篇

猜你喜欢

热点阅读