数据模型CRUD
[TOC]
什么是数据模型?
数据模型通过结构化、简化和逻辑化的方式,将真实世界的复杂实体和关系转化为计算机可处理的数据表示。他有如下一些特点。
- 抽象了数据库通用查询。
- 抽象了常见的关联关系。
- 抽象了常见的复杂实体。
功能描述
调用数据模型方法
- callModel (推荐)
callDataSource兼容callModel。
参数说明
| 参数名 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| name | string | 无 | 是 | 数据源标识 |
| dataSourceName | string | 无 | 是 | 等价于name |
| methodName | string | 无 | 是 | 数据源方法名 |
| params | object | 无 | 是 | 方法参数,根据方法实际入参填写 |
| fetchOption | object | 无 | 否 | 选项 |
使用开发者身份(超级管理员角色)
某些字段仅有开发者身份可以修改和创建。另外,在一些查询场景下需要使用开发者身份。
示例:
const res = await context.callModel({
dataSourceName: 'demo',
methodName: 'wedaGetItemV2',
params: {},
fetchOption: {useAdmin: true}
})
⚠️ 重要注意事项
- 安全风险
- 注意这里的安全风险。使用开发者身份可以查询到所有数据,此选项为开发者主动设置。请开发者注意这里的安全风险。 由此引入的安全风险,不属于平台的安全风险。
- 权限
- 开发者身份等价于超级管理员角色。
methodName :支持的方法列表
- 新增:
wedaCreateV2 - 新增多条:
wedaBatchCreateV2 - 删除:
wedaDeleteV2 - 删除多条:
wedaBatchDeleteV2 - 更新:
wedaUpdateV2 - 更新多条:
wedaBatchUpdateV2 - 查询:
wedaGetItemV2 - 查询多条:
wedaGetRecordsV2
params :对应方法支持的相关参数
示例模型
学生模型

老师模型

选课模型

创建
参数说明
创建单条
入参结构
| 属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
|---|---|---|---|---|---|
| data | { [key: string]: any; } | 无 | {name: "demo"} | 是 | 对应数据源的字段结构 |
出参结构
| 属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
|---|---|---|---|---|---|
| id | string | 无 | "7L5G32U9PE" | 是 | id 为对应创建数据源数据对应的标识 |
string | 无 | "7L5G32U9PE" | 是 | Id 为对应创建数据源数据对应的标识(后续废弃) |
创建多条
入参结构
| 属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
|---|---|---|---|---|---|
| data | { [key: string]: any }[] | 无 | [{name: "juli"}] | 是 | 不能为空数组, 传入空对象会被忽略 |
出参结构
| 属性 | 类型 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|
| idList | idList: string[] | 无 | ["7L5G32U9PE"] | idList 为对应创建数据源数据对应的标识列表 |
IdList: string[] | 无 | ["7L5G32U9PE"] | IdList 为对应创建数据源数据对应的标识列表(后续废弃) |
⚠️ 重要注意事项
- 权限
- 只有是开发者身份(即超级管理员角色)时才能修改系统字段。
- 过滤
- 当传入不在模型中定义的字段时,会被过滤掉。
- 数据校验
- 会对传入的数据做类型校验。如果校验错误,请查看对应字段类型值。
示例
创建单条
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:10
},
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"id":"BH4Q75GUTA",
"Id":"BH4Q75GUTA",
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:10
},
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"id": "BH47EEU864",
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
这里callDataSource 和 callModel都是等价的。这里特意举例,后续不再提到
async ({ params }) => {
const data = await $w.cloud.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:10
},
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
创建多条
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaBatchCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:[{
name:"foo",
age:2
},{
name:"bar",
age:10
}
],
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"idList":["BH4QX0UYM6","BH4QX0UYM7"],
"IdList":["BH4QX0UYM6","BH4QX0UYM7"],
}
可视化开发 编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: "student", // 数据模型标识
methodName: "wedaBatchCreateV2",
params: {
data:[{
name:"foo",
age:2
},{
name:"bar",
age:10
}
],
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"idList": [
"BH4R1XV17N",
"BH4R1XV17P"
],
"profile": {
"requestTimeCost": 475,
"trrigerTimeCost": 475,
"resolveParamsTimecost": 0
}
}
创建一条数据并关联(多对一)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"lee",
age:20,
teacher_id:{"_id":"BH4R1XV17P"},
}
}
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"id":"BH4TH0G9EY",
"Id":"BH4TH0G9EY",
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'post', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"lee",
age:20,
teacher_id:{"_id":"BH4R1XV17P"},
}
}
});
console.log("请求结果", data);
return data;
}
查看结果
{
"id": "BH47EEU864",
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
创建一条数据并关联(一对多)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'teacher', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"Teacher Zhang",
isMaster:true,
student_list:[{"_id":"BERN1Y59JG"}, {"_id":"BERN0LHV2Y"}],
}
}
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"id":"BH4U9NHXGU",
"Id":"BH4U9NHXGU",
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'teacher', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"Teacher Zhang",
isMaster:true,
student_list:[{"_id":"BERN1Y59JG"}, {"_id":"BERN0LHV2Y"}],
}
}
});
console.log("请求结果", data);
return data;
}
查看结果
{
"id": "BH4U9NHXGU",
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
创建一条数据并关联(多对多)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前 模型支持的方法
params: {
data:{
name:"Student Zhang",
age:18,
course_id_list:[{"_id":"BH4BK0G1U4"}, {"_id":"BH4BGT241E"}],
}
}
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"id":"BH4UMKTNM6",
"Id":"BH4UMKTNM6",
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"Student Zhang",
age:18,
course_id_list:[{"_id":"BH4BK0G1U4"}, {"_id":"BH4BGT241E"}],
}
}
});
console.log("请求结果", data);
return data;
}
查看结果
{
"id": "BH4UMKTNM6",
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
修改
- 说明:修改是增量更新。如果没有传入修改的字段的值,不会进行更新。如果传入null,则会更新为null。
- 限制:批量修改一次最多允许修改200条数据。
参数说明
修改单条
入参结构
| 属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
|---|---|---|---|---|---|
| data | { [key: string]: any; } | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
| filter | { where: FilterObject} | 无 | {filter: {where: {_id:{$eq:"foo"}}}} | 是 | 复杂查询结构 |
FilterObject为复杂查询结构,请参考查询参数说明该方法为单条更新方法,如果使用筛选条件,筛选得到多条数据,则不能用这个方法更新
出参结构
| 属性 | 类型 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|
| count | count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功。 |
Count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功。(后续废弃) |
修改多 条
入参结构
| 属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
|---|---|---|---|---|---|
| data | { [key: string]: any; } | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
| filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
FilterObject 为复杂查询结构,请参考查询参数说明
批量更新一次最多只能 更新200条
出参结构
| 属性 | 类型 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|
| count | count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功 |
Count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃) |
示例
修改单条
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的 任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:12
},
filter:{
where:{
name:{$eq:"luke"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":1,
"Count":1,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:12
},
filter:{
where:{
name:{$eq:"luke"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 1,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
修改多条
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaBatchUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:12
},
filter:{
where:{
name:{$eq:"luke"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":2,
"Count":2,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaBatchUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
name:"foo",
age:12
},
filter:{
where:{
name:{$eq:"luke"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 2,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
修改单条数据的关联关系(多对一)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模 型支持的方法
params: {
data:{
teacher_id:{_id:"BERMV99BBN"},
},
filter:{
where:{
name:{$eq:"foo"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":1,
"Count":1,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
teacher_id:{_id:"BERMV99BBN"},
},
filter:{
where:{
name:{$eq:"foo"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 1,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
修改单条数据的关联关系(一对多)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'teacher', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
student_list:[{_id:"BERN1Y59JG"}, {_id:"BERN0LHV2Y"}],
},
filter:{
where:{
name:{$eq:"zhang"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":1,
"Count":1,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'teacher', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
student_list:[{_id:"BERN1Y59JG"}, {_id:"BERN0LHV2Y"}],
},
filter:{
where:{
name:{$eq:"zhang"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 1,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
清空单条数据的关联关系(一对多)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'teacher', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
student_list:[],
},
filter:{
where:{
name:{$eq:"zhang"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":1,
"Count":1,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'teacher', // 数据模型 标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
student_list:[],
},
filter:{
where:{
name:{$eq:"zhang"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 1,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}
修改单条数据的关联关系(多对多)
APIs示例
module.exports = async function (params, context) {
const result = await context.callModel({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
course_id_list:[{_id:"BERN1Y59JG"}, {_id:"BERN0LHV2Y"}],
},
filter:{
where:{
name:{$eq:"Student Zhang"}
}
}
}, // 数据模型方法的入参
});
// 在这里返回这个方法的结果,需要与出参定义的结构映射
return result;
};
查看结果
{
"count":1,
"Count":1,
}
可视化开发编辑器示例
请求
async ({ params }) => {
const data = await $w.cloud.callDataSource({
dataSourceName: 'student', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
methodName: 'wedaUpdateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
params: {
data:{
course_id_list:[{_id:"BERN1Y59JG"}, {_id:"BERN0LHV2Y"}],
},
filter:{
where:{
name:{$eq:"Student Zhang"}
}
}
}, // 数据模型方法的入参
});
console.log("请求结果", data);
return data;
}
查看结果
{
"count": 1,
"profile": {
"requestTimeCost": 694,
"trrigerTimeCost": 694,
"resolveParamsTimecost": 0
}
}