tencent cloud

云开发 CloudBase

产品简介
产品概述
功能和优势
应用场景
系统限制
购买指南
价格文档
计费能力项说明
包年包月套餐说明
告警与通知
欠费说明
开发指南
云储存
数据库
身份认证
云函数
静态网站托管
SDK 文档
客户端 SDK
服务端 SDK
管理端 SDK
产品协议
Cloud Development Service Level Agreement

数据模型概述

PDF
聚焦模式
字号
最后更新时间: 2025-12-31 11:53:08

数据模型简介

数据模型是一个用于组织和管理数据的工具,工作在云开发数据库之上。它可以帮助我们更好地理解和操作数据,提高开发效率和数据质量。
云开发数据模型为开发者提供了更加高级的查询、校验等功能,提供了多端 SDK 可供调用,同时可以一键生成可编辑的管理应用。同时内置集成了 CMS 管理端、AI 智能分析能力,方便各种角色的用户进行数据管理和分析。
以下是数据模型的一些核心特点:
1. 数据校验:自动检查数据是否正确,避免错误。
2. 关联关系处理:自动处理数据之间的关系,简化操作。
3. 自动生成代码:根据数据模型快速生成代码,提高开发速度。
4. CMS 管理端:提供简单易用的数据管理界面,方便非技术人员操作。
5. 自动生成应用代码:提供快速从模型生成可编辑的管理应用
6. AI 智能分析:利用 AI 分析数据,发现有价值的信息。
7. 高级查询支持:支持复杂的查询操作,满足各种需求。

数据模型和数据库的关系

数据模型是对数据库的抽象,它定义了数据模型的结构、字段、约束和关系。数据模型提供了一种统一的方式来描述和操作数据,简化了数据操作和查询。数据模型能力即为开发中常用的对象关系映射 ORM。
数据模型和数据库是关联关系,一个数据模型,对应了数据库中的一个集合(非结构化数据库)或表(结构化数据库)。
使用数据模型,不代表被限制为仅能使用数据模型。在使用数据模型的同时,如果需要有更复杂、或数据模型无法很好完成的操作,也可以通过数据库的原生方法,直接操作数据库完成数据读写。
相对于传统开发框架中的 ORM,云开发数据模型除 ORM 相关的 SDK 操作数据的能力外,额外整合了数据管理界面、用户及权限体系、内容管理以及进一步的基于数据模型的应用生成、数据分析等更多能力。

启用数据模型

可访问云开发云后台-数据模型,选择新建模型,可以选择 3 种方式:
对接已有数据库表并生成数据模型:对接已经有的数据库表或集合,并生成数据模型;这种情况可以对接存量已经在使用的云数据库(文档型)的集合,或者自有 MySQL 数据库的表,生成集合,对已有的数据库集合或表没有影响,对存量数据也没有影响,仅是生成模型,为后续的进一步开发提供模型可用的方法。
创建数据库并配置数据模型:选择创建新的数据库表或集合,并同时配置模型结构;这种情况下,会在选择的数据库上新建集合或表(根据选择的云数据库类型或选择自有数据库),并创建出数据模型;创建后可以使用数据模型方法进行数据读写,也可以使用数据库方法进行数据读写。
导入存量内容管理 CMS :从存量的云开发 CMS 中导入模型,主要用于存量 CMS 的迁移,通过使用新版本的内容管理,获取到持续更新和迭代升级的 CMS 能力。
新建模型后即可使用数据模型提供的各项能力。

使用数据模型优势

使用数据模型可以提高开发效率、降低维护成本、增强数据安全性,并拥有强大的数据分析和管理能力。

数据校验和类型检查

数据模型可以自动处理数据的校验和类型检查,确保数据的准确性和一致性。这有助于在数据输入、更新和查询过程中避免错误,提高数据质量。
首先,我们在云后台的数据模型中定义一个简单的文章数据模型 post
我们定义了两个属性:title(字符串类型)、body(字符串类型)
接下来,我们尝试插入一个包含错误类型数据的对象:
使用 create() 方法创建新文章:
try {
const { data } = await models.post.create({
data: {
title: "你好,世界",
body: 123456, // 这里故意设置为字符串类型,而非对象 ID 类型
},
});

// 返回创建的文章 id
console.log(data);
// { id: "7d8ff72c665eb6c30243b6313aa8539e"}
} catch (error) {
console.error("Error:", error);
}
在这个例子中,我们故意将 body 属性的值设置为数字类型 123456,而不是正确的文本类型。当我们尝试插入这条数据时,数据模型会检测到类型不匹配,并抛出一个错误。输出结果如下:
Error: WxCloudSDKError: 【错误】数据格式校验失败。根因:[#/body: expected type: String, found: Integer],原因:字段[正文], 标识[body], 类型不匹配:期望类型:字符串。,解决步骤:请按照原因修改数据类型。 errRecord:{"title":"你好,世界","body":123456}【操作】调用 post.create
这个错误提示表明,数据模型成功地检测到了类型错误,并阻止了错误数据的插入。这有助于确保数据的准确性和一致性。

自动处理关联关系

数据模型能够自动处理实体之间的关联关系,如一对一、一对多和多对多等关系。这使得在数据库设计和操作时能够更加方便地管理这些关系,提高数据处理的效率。
我们可以使用嵌套查询数据库中的多个表中读取相关数据 ,例如文章及其评论
例如通过 select 来指定查询结果中返回关联字段及其内部的特定字段。
const { data } = await models.post.list({
// 只查询必要的字段
select: {
_id: true,
title: true,
updatedAt: true,
comments: {
_id: true,
createdAt: true,
comment: true,
},
},
filter: {
where: {},
},
getCount: true, // 开启用来获取总数
});

// 返回查询到的数据列表 `records` 和 总数 `total
// 返回的内容明显是经过了数据库的过滤,只返回了_id, title, updatedAt三个字段
console.log(data);
// {
// records: [
// {
// _id: '9FSAHWM9VV',
// comments: [
// {
// createdAt: 1718096509916,
// comment: '11',
// _id: '9FSAJF3GLG',
// },
// ],
// title: 'Bonjour le Monde',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VU',
// comments: [],
// title: '你好,世界',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VT',
// comments: [],
// title: 'Hola Mundo ',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VS',
// comments: [],
// title: 'Hello World',
// updatedAt: 1718096503886,
// },
// ],
// }

自动生成 CRUD 代码

通过数据模型,可以自动生成针对小程序/web/云函数等多端的增删改查(CRUD)代码。这大大减少了开发人员的工作量,提高开发效率。
例如使用 upsert() 方法创建或更新文章内容:
const post = {
title: "Hello World",
body: "Hello World",
_id: "foo",
};
const { data } = await models.post.upsert({
create: post,
update: post,
filter: {
where: {
_id: {
$eq: post._id,
},
},
},
});
console.log(data);
// 新增时返回
// {
// "count": 0,
// "id": "foo"
// }

// 更新时返回
// {
// "count": 1,
// "id": ""
// }

自带 CMS 管理端

数据模型提供了自带的内容管理系统(CMS),非技术人员也能轻松地进行数据管理和维护,降低运营成本。

一键生成可编辑的管理端代码

数据模型支持一键生成可编辑的管理端,采用低代码技术可视化修改和定制开发,使得开发者无需手动编写管理界面,进一步提高开发效率

一键 AI 智能分析数据

数据模型可以使用 AI 来对数据进行智能分析。有助于从海量数据中提取有价值的信息,为决策提供有力支持。

支持 MySQL 高级查询

数据模型支持 MySQL 等关系型数据库的高级查询功能,如复杂的条件筛选、排序、分组等。用户能够更加灵活地查询和分析数据,满足各种业务需求。
可参考 数据库原生查询文档
例如 查询作者联系电话以"1858"开头的记录
const result = await models.$runSQL(
"SELECT * FROM `lcap-wzcs_iuujo7p` WHERE author_tel LIKE '{{tel}}';",
{
tel: "1858%",
}
);

console.log(result);
// {"data":{"total":1,"executeResultList":[{"owner":"1739272568342245378","is_published":true,"author_web":"https://qq.com","banner":"cloud://lowcode-0gr8x3i8cd1c6771.6c6f-lowcode-0gr8x3i8cd1c6771-1307578329/weda-uploader/ec687de371d4ad064efd0a424a69e969-logo (1).png","auto_no":"1000","body":"<p>hello world</p>","title":"hello","type":"[\\"test\\",\\"test\\"]","author_tel":"18588881111","createdAt":1719475245475,"createBy":"1739272568342245378","read_num":997,"updateBy":"1739272568342245378","_openid":"1739272568342245378","extra":"{}","markdown":"# aa\\n\\n\\n\\n","author_email":"a@qq.com","json":"{\\"a\\":\\"1\\"}","_id":"9JXU7BWFZJ","region":"北京市","updatedAt":1719475245475}],"backendExecute":"28"},"requestId":"0d4c98c3-a3ff-4c55-93cc-d0f5c835f82c"}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈