数据模型方法
腾讯云微搭低代码的数据源提供了数据模型,开发者可以使用 context.callModel
方法来操作数据模型,具体模型方法包括:新增 wedaCreate、新增多条 wedaBatchCreate、删除 wedaDelete、批量删除 wedaBatchDelete、更新 wedaUpdate、批量更新 wedaBatchUpdate、查询 wedaGetItem、查询列表 wedaGetRecords。 本文以如下数据模型为例,说明数据模型方法的使用,示例代码为 APIs 中的自定义代码。
说明:
关于如何在编辑器中使用这些方法,请参见 Query 数据查询介绍。
以下示例代码均为 APIs 自定义代码中数据模型的使用方式,更多用法请参见 APIs 自定义代码。
新增 wedaCreate
添加一条记录。
入参说明
新增方法的输入参数为数据模型全部的非系统字段,例如:name、age 等。
{ "name": "张三", "age": 15 }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
新记录的 ID | _id | 文本 | 创建成功的数据标识 |
{ "_id": "16db756f62d7c0870b8caa2a39d33dcb" }
使用示例
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaCreate', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { lastname: "张", firstname: "三", price: 15, amount: 20, }, // 数据模型方法的入参 }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
新增多条 wedaBatchCreate
新增多条记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
数据内容 | records | 对象数组 | 是 | 待新增的多条数据 |
{ "records": [ { "name": "张三", "age": 15 } ] }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
新记录的 ID 数组 | ids | 文本数组 | 创建成功的数据标识 |
{ "ids": ["16db756f62d7c0870b8caa2a39d33dcb"] }
使用示例
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaBatchCreate', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params:{ records:[{ lastname: "张", firstname: "三", price: 15, amount: 20, }] },// 数据模型方法的入参 }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
删除 wedaDelete
删除一条指定数据标识的记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
数据标识 | _id | 文本 | 是 | 待删除的记录数据标识 |
{ "_id": "16db756f62d7c0870b8caa2a39d33dcb" }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
删除的记录条数 | deleted | 数字 | 成功删除的记录条数 |
{ "deleted": 1 }
使用示例
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaDelete', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { _id: "84f7894263706d0900950bc52687737f" }, // 数据模型方法的入参 }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
批量删除 wedaBatchDelete
根据条件删除多条记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
查询条件 | where | 对象数组 | 否 | 匹配的查询条件 |
字段名称 | where[].key | 文本 | 是 | 模型字段标识 |
关系 | where[].rel | 文本 | 是 | 判断关系。可选值: "eq"表示相等,"neq"表示不相等,"lt"表示小于,"lte"表示小于或等于,"gt"表示大于,"gte"表示大于或等于,"search"表示包含文字内容 |
值 | where[].val | - | 是 | 判断值。根据字段类型写入不同的值 |
{ "where": [ { "key": "name", "rel": "eq", "val": "张三" } ] }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
删除的记录条数 | deleted | 数字 | 成功删除的记录条数 |
使用示例
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaBatchDelete', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { where: [{ key: "firstname", rel: "eq", // 可选值有: eq(相等) neq(不相等) lt(小于) lte(小于或等于) gt(大于) gte(大于或等于) search(包含文字内容) val: "张", }], }, // 数据模型方法的入参 }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
更新 wedaUpdate
更新一条指定数据标识的记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
数据标识 | _id | 文本 | 是 | 待更新记录的数据标识 |
{ "_id": "16db756f62d7c0870b8caa2a39d33dcb", "name": "张三", "age": 15 }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
新记录的 ID 数组 | ids | 文本数组 | 创建成功的数据标识 |
{ "ids": ["16db756f62d7c0870b8caa2a39d33dcb"] }
使用示例
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaUpdate', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { _id: "84f7894263706d0900950bc52687737f", // 需要更新的记录标识 lastname: "黄", // 更新后的值 }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
批量更新 wedaBatchUpdate
根据条件更新多条记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
查询条件 | where | 对象数组 | 是 | 匹配的查询条件 |
字段名称 | where[].key | 文本 | 是 | 模型字段标识 |
关系 | where[].rel | 文本 | 是 | 判断关系。可选值: "eq"表示相等,"neq"表示不相等,"lt"表示小于,"lte"表示小于或等于,"gt"表示大于,"gte"表示大于或等于,"search"表示包含文字内容 |
值 | where[].val | - | 是 | 判断值。根据字段类型写入不同的值 |
更新数据 | record | 对象 | 是 | 使用该数据,更新全部匹配条件的记录 |
{ "where": [ { "key": "name", "rel": "eq", "val": "张三" } ], "record": { "name": "张三", "age": 12 } }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
更新的记录条数 | updated | 数字 | 更新成功的数据标识 |
{ "updated": 1 }
使用示例
匹配 where 条件的记录都更新为 record 的内容。
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaBatchUpdate', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { record: { lastname: "黄", // 更新后的值 }, where: [{ key: "firstname", rel: "eq", // 可选值有: eq(相等) neq(不相等) lt(小于) lte(小于或等于) gt(大于) gte(大于或等于) search(包含文字内容) val: "张", }], }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
查询 wedaGetItem
查询一条指定数据标识的记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
查询条件 | where | 对象数组 | 否 | 匹配的查询条件 |
字段名称 | where[].key | 文本 | 是 | 模型字段标识 |
关系 | where[].rel | 文本 | 是 | 判断关系。可选值: "eq"表示相等,"neq"表示不相等,"lt"表示小于,"lte"表示小于或等于,"gt"表示大于,"gte"表示大于或等于,"search"表示包含文字内容 |
值 | where[].val | - | 是 | 判断值。根据字段类型写入不同的值 |
{ "where": [ { "key": "name", "rel": "eq", "val": "张三" } ] }
出参说明
出参为数据模型字段,例如:name、age 等。
{ "_id": "16db756f62d7c0870b8caa2a39d33dcb", "name": "张三", "age": 15 }
使用示例
根据查询条件返回一条匹配的记录。
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaGetItem', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { _id: "84f7894263706d0900950bc52687737f", // 指定某个具体的数据标识 where: [{ // 或根据指定的条件 key: "firstname", rel: "eq", // 可选值有: eq(相等) neq(不相等) lt(小于) lte(小于或等于) gt(大于) gte(大于或等于) search(包含文字内容) val: "张", }], }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
查询列表 wedaGetRecords
根据条件以分页列表格式返回多条记录。
入参说明
字段名称 | 字段标识 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|---|
查询条件 | where | 对象数组 | 否 | 匹配的查询条件 |
字段名称 | where[].key | 文本 | 是 | 模型字段标识 |
关系 | where[].rel | 文本 | 是 | 判断关系。可选值: "eq"表示相等,"neq"表示不相等,"lt"表示小于,"lte"表示小于或等于,"gt"表示大于,"gte"表示大于或等于,"search"表示包含文字内容 |
值 | where[].val | - | 是 | 判断值。根据字段类型写入不同的值 |
页码 | pageNo | 数字 | 否 | 从1开始 |
每页数 | pageSize | 数字 | 否 | 每次查询的最大记录数,默认为10,如需设置为其它值,需要和 pageNo 配合使用,两者同时指定才会生效 |
排序字段名称 | orderBy | 文本 | 否 | 按某个字段进行排序 |
排序方式 | orderType | 文本 | 否 | "desc" 表示降序,"asc"表示升序 |
{ "where": [ { "key": "name", "rel": "eq", "val": "张三" } ], "pageNo": 1, "pageSize": 20, "orderBy": "age", "orderType": "desc", }
出参说明
字段名称 | 字段标识 | 数据类型 | 说明 |
---|---|---|---|
记录总条数 | total | 数字 | 所有匹配条件的总条数 |
页码 | pageNo | 数字 | 当前页码 |
每页记录数 | pageSize | 数字 | 每次查询的最大记录数 |
记录列表 | records | 对象数组 | 查询的结果列表 |
{ "records": [ { "name": "张三", "age": 2 } ], "total": 100, "pageNo": 1, "pageSize": 20 }
使用示例
根据查询条件分页返回匹配的记录。
module.exports = async function (params, context) { const result = await context.callModel({ name: 'example', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看 methodName: 'wedaGetRecords', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法 params: { pageNo: 1, pageSize: 10, orderBy: "firstname", orderType: "desc", where: [{ // 或根据指定的条件 key: "firstname", rel: "eq", // 可选值有: eq(相等) neq(不相等) lt(小于) lte(小于或等于) gt(大于) gte(大于或等于) search(包含文字内容) val: "张", }], }, }); // 在这里返回这个方法的结果,需要与出参定义的结构映射 return result;};
数据模型方法查询条件 Where
数据模型方法中 where 字段可以支持简单与复杂两种类型的查询条件
数据模型方法V2
功能描述
调用数据源,包括数据模型及 APIs。
入参
params: ICallDataSourceParams
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
dataSourceName | string | 无 | 是 | 数据源标识 |
methodName | string | 无 | 是 | 数据源方法名 |
params | object | 无 | 是 | 方法参数,根据方法实际入参填写 |
如果数据源是数据模型,因为其方法皆由平台提供,其可用的数据源方法(methodName)是:
新增:wedaCreateV2
新增多条:wedaBatchCreateV2
删除:wedaDeleteV2
删除多条:wedaBatchDeleteV2
更新:wedaUpdateV2
更新多条:wedaBatchUpdateV2
查询:wedaGetItemV2
查询多条:wedaGetRecordsV2
方法入参结构及示例
说明
示例数据源 sjmx_ftf41oj 包含名为 name,类型为 string 的字段,包含名为 email,类型为 string 的字段。
新增(wedaCreateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | {[key: string]: any;} | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
出参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
id | string | 无 | "7L5G32U9PE" | 是 | ID 为对应创建数据源数据对应的标识 |
Id | string | 无 | "7L5G32U9PE" | 是 | ID 为对应创建数据源数据对应的标识(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaCreateV2", params: { data: { email: "bar@weda.io", name: "foo", }, }, }); console.log("请求结果", data); // {"id": "f8f6930864c11bde006ff6c4662f9bf6"} } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
添加关联关系
现有数据模型 sjmx_ftf41oj(数据模型),glmx_b2z3oh7(关联模型)。 如果试图在 sjmx_ftf41oj 模型中添加一条数据关联 glmx_b2z3oh7 中的一条数据,数据标识为 62fd7a3664d1e8ba00cc579835a1ded2。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaCreateV2", params: { data: { email: "bar@weda.io", name: "foo", relation: "62fd7a3664d1e8ba00cc579835a1ded2" }, }, }); console.log("请求结果", data); // {"id": "f8f6930864c11bde006ff6c4662f9bf6"} } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
新增多条(wedaBatchCreateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | { [key: string]: any }[] | 无 | [{name: "juli"}] | 是 | 不能为空数组,传入空对象会被忽略 |
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
idList | idList: string[] | 无 | ["7L5G32U9PE"] | idList 为对应创建数据源数据对应的标识列表 |
IdList | IdList: string[] | 无 | ["7L5G32U9PE"] | IdList 为对应创建数据源数据对应的标识列表(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaBatchCreateV2", params: { data: [ { email: "bar@weda.io", name: "foo", }, { email: "juli@weda.io", name: "juli", }, ], }, }); console.log("请求结果", data); // {"idList": ["f8f6930864c11fee007010104a2589c4","f8f6930864c11fee0070101171d96063"]} } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
添加关联关系
现有数据模型 sjmx_ftf41oj(数据模型),glmx_b2z3oh7(关联模型)。 如果试图在 sjmx_ftf41oj 模型中添加多条数据关联 glmx_b2z3oh7 中的多条数据,数据标识为 6243df、76589xf。 例如:foo关联6243df, juli关联76589xf。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaBatchCreateV2", params: { data: [ { email: "bar@weda.io", name: "foo", relation: "6243df", }, { email: "juli@weda.io", name: "juli", relation: "76589xf", }, ], }, }); console.log("请求结果", data); // {"idList": ["f8f6930864c11fee007010104a2589c4","f8f6930864c11fee0070101171d96063"]} } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
更新(wedaUpdateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | { [key: string]: any }[] | 无 | [{name: "juli"}] | 是 | 不能为空数组,传入空对象会被忽略 |
filter | { where: FilterObject} | 无 | {filter: {where: {_id:{$eq:"foo"}}}} | 是 | 不能为空数组,传入空对象会被忽略 |
说明
FilterObject 为复杂查询结构,请参考查询参数说明。
该方法为单条更新方法,如果使用筛选条件,筛选得到多条数据,则不能用这个方法更新。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
count | count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功。 |
Count | Count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功。(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaUpdateV2", params: { // 更新数据 data: { email: "zhangSan@weda.io", }, // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 1 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
添加关联关系
现有数据模型 sjmx_ftf41oj(数据模型),glmx_b2z3oh7(关联模型)。 如果试图在 sjmx_ftf41oj 模型中添加一条数据关联 glmx_b2z3oh7 中的一条数据,数据标识为 62fd7a3664d1e8ba00cc579835a1ded2。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaUpdateV2", params: { // 更新数据 data: { email: "zhangSan@weda.io", relation: "62fd7a3664d1e8ba00cc579835a1ded2", }, // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 1 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
更新多条(wedaBatchUpdateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | { [key: string]: any }[] | 无 | [{name: "juli"}] | 是 | 不能为空数组,传入空对象会被忽略 |
filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
说明
FilterObject 为复杂查询结构,请参考查询参数说明。
批量更新一次最多只能更新200条。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
count | count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功 |
Count | Count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaBatchUpdateV2", params: { // 更新数据 data: { email: "zhangSan@weda.io", }, // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { name: { $eq: "juli", }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 3 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
添加关联关系
现有数据模型 sjmx_ftf41oj(数据模型),glmx_b2z3oh7(关联模型)。 如果试图在 sjmx_ftf41oj 模型中添加一条数据关联 glmx_b2z3oh7 中的一条数据,数据标识为 62fd7a3664d1e8ba00cc579835a1ded2。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaBatchUpdateV2", params: { // 更新数据 data: { email: "zhangSan@weda.io", relation: "62fd7a3664d1e8ba00cc579835a1ded2", }, // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 1 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
删除(wedaDeleteV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
filter | { where: FilterObject } | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
说明
FilterObject 为复杂查询结构,请参考查询参数说明。 数据源筛选条件满足条数为 1 以上进行时进行单条更新会出错。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
count | count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功 |
Count | Count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaDeleteV2", params: { // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 1 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
删除多条(wedaBatchDeleteV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
说明
FilterObject 为复杂查询结构,请参考查询参数说明。
批量删除一次最多只能删除200条。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
count | count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功 |
Count | Count:0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaBatchDeleteV2", params: { // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { name: { $eq: "juli", // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, }, }); console.log("请求结果", data); // { count: 3 } } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
查询(wedaGetItemV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
select | { [key: string]: boolean } | 无 | { $master: true } | 是 | 可以指定返回本表或者关联表的字段,如果想查询本表所有字段,请使用 { $master: true } |
说明
FilterObject 为复杂查询结构,请参考查询参数说明。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
对应数据源字段结构 | { [key: string]: any } | 无 | { name: "juli" } | 返回满足筛选条件的数据源详情 |
编辑器 Javascript 代码示例:
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaGetItemV2", params: { // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: "f8f6930864c11fee007010104a2589c4", // 获取单条时,推荐传入_id数据标识进行操作 }, }, ], }, }, select: { $master: true, // 常见的配置,返回主表 }, }, }); console.log("请求结果", data); // "{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467}" } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
查询多条(wedaGetRecordsV2)
入参结构
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
filter | { where: FilterObject} | 无 | 是 | 复杂查询结构 |
select | { [key: string]: boolean } | 无 | 是 | { $master: true } 可以指定返回本表或者关联表的字段,如果想查询本表所有字段,请使用 { $master: true } |
getCount | boolean | false | 否 | 获取 filter 命中条件的查询条数 |
pageSize | number | 10 | 否 | 分页大小,建议指定,如需设置为其它值,需要和 pageNo 配合使用,两者同时指定才会生效 |
pageNumber | number | 1 | 否 | 分页数目 |
orderBy | {[key: string]: "acs" "desc" }[] | 无 | 否 | 排序,当前仅支持最多 3 字段排序 |
compatibleWithV1 | boolean | false | 否 | 对旧关联关系的兼容,下面详细介绍 |
说明
请不要依赖协议中任何的默认值。
对于 orderBy 的排序,在默认情况下以底层数据库查询结果为准,不存在新建数据一定会排在最前的情况。
查询请求单次最大仅支持200条。
如何获取新创建的第一条数据
设置排序条件为创建时间字段降序排序,每页条数为1,页码为1,终查询结果中,取records[0]中的数据 出参结构:
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
records | { [key: string]: any }[] | 无 | { name: "juli" } | records 内的数组为对应的数据源数据对象 |
total | number | 无 | 1 | 入参配置了 getCount 为 true 时会返回满足筛选查询条件的大小,注意,此字段不代表返回 records 的长度,可以用作页面大小的计算。当 getCount 为 false 的时候,不应该对此值做任何期待 |
编辑器 Javascript 代码示例
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaGetRecordsV2", params: { // 排序 orderBy: [ { createdAt: "desc", // 创建时间,倒序 }, ], // 返回total字段 getCount: true, // 页面大小 pageSize: 1, // 当前页面 pageNumber: 1, }, }); console.log("请求结果", data); // "{"records":[{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467}],"total":1}" } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
select 详解
select 主要用来帮助手动筛选字段。通过设置 select,可以对筛选的结果进行选择。 假设存在主模型 student 有字段 _id
, name,age,relateSchool(旧关联关系),newRelateSchool(新关联关系-多对一)。 假设存在关联模型 school 有字段 _id
,school_name,school_address。 主模型 student 通过关联字段 relateSchool 和关联模型 school建立关联。即 relateSchool 字段 存取了 school 表某条数据的 _id
值。
说明
因为一些内部调整原因。将关联关系字段和主子明细字段作为 关联关系(旧)字段。其返回关联数据的方式通过特殊前缀@
的方式进行返回。
对于新关联关系,则是以关联关系字段本身作为返回。
筛选主模型(当前模型)字段。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "student", methodName: "wedaGetRecordsV2", params: { // 返回字段选择 select: { name: true, age: true }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); console.log("请求结果", data); } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
筛选关联模型字段,筛选旧关联关系。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "relateSchool", methodName: "wedaGetRecordsV2", params: { // 返回字段选择 select: { name: true, age: true, relateSchool: true }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); console.log("请求结果", data); } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
此时只会返回关联的 school 表中 _id
值。如果想返回更多的关联数据。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "relateSchool", methodName: "wedaGetRecordsV2", params: { // 返回字段选择 select: { name: true, age: true, relateSchool: true }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, // 是否兼容V1协议 compatibleWithV1: true, }, }); console.log("请求结果", data); } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
示例返回值如下:
{ "records":[ { "relateSchool":"7EZPN3F128", "name":"xiaoming", "_id":"7EZPN3F3ZS", "age":12, "@relateSchool":{ "v1":{ "primaryColumn":"name", "record":{ "_id": "7EZPN3F128", "school_name":"WeDa小学", "school_address": "西红市光明路" } } } } ], "total":3 }
筛选关联模型字段,筛选新关联关系(多对一)。
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "relateSchool", methodName: "wedaGetRecordsV2", params: { // 返回字段选择 select: { name: true, age: true, newRelateSchool: {school_name: true} }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); console.log("请求结果", data); } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
示例返回值如下:
{ "records":[ { "name":"xiaoming", "_id":"7EZPN3F3ZS", "age":12, "newRelateSchool":{ "_id":"7EZPN3F128", "school_name":"WeDa小学" } } ], "total":3 }
说明
对于关联字段,即使没有查询 _id
字段,也会返回。
compatibleWithV1详解
本开关用于返回对关联关系(旧)的关联数据返回,并以 @
符号返回。 示例返回值如下:
{ "records":[ { "relateSchool":"7EZPN3F128", "name":"xiaoming", "_id":"7EZPN3F3ZS", "age":12, "@relateSchool":{ "v1":{ "primaryColumn":"name", "record":{ "_id": "7EZPN3F128", "school_name":"WeDa小学", "school_address": "西红市光明路" } } } } ], "total":3 }
如果设置为 compatibleWithV1:false
后。
{ "records":[ { "relateSchool":"7EZPN3F128", "name":"xiaoming", "_id":"7EZPN3F3ZS", "age":12 } ], "total":3 }
将不会返回额外的关联字段。
说明
因为一些内部调整原因。将关联关系字段和主子明细字段作为关联关系(旧)字段。其返回关联数据的方式通过特殊前缀 @
的方式进行返回。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
records | { [key: string]: any }[] | 无 | { name: "juli" } | records 内的数组为对应的数据源数据对象 |
total | number | 无 | 3 | 入参配置了 getCount 为 true 时会返回满足筛选查询条件的大小,注意,此字段不代表返回 records 的长度,可以用作页面大小的计算。当 getCount 为 false 的时候,不应该对此值做任何期待 |
编辑器 Javascript 代码示例:
export default async function ({event, data}) { try { const data = await $w.cloud.callDataSource({ dataSourceName: "sjmx_ftf41oj", methodName: "wedaGetRecordsV2", params: { // 筛选内容,当前筛选的含义为:名字为 "juli" 或者 "foo" filter: { where: { $or: [ { name: { $eq: "juli", }, }, { name: { $eq: "foo", }, }, ], }, }, // 排序 orderBy: [ { createdAt: "asc", // 创建时间,正序 }, { updateBy: "desc", // 更新时间,倒序 }, ], // 返回字段选择 select: { $master: true, // 常见的配置,返回主表 }, // 返回total字段 getCount: true, // 页面大小 pageSize: 10, // 当前页面 pageNumber: 1, }, }); console.log("请求结果", data); // "{"records":[{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467},{"owner":"1559148626461061122","createdAt":1690382002594,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"juli","_id":"f95d024c64c12eb2006fd51d38654e28","email":"juli@weda.io","updatedAt":1690382002594}],"total":2}" } catch (e) { console.log("错误代码", e.code, "错误信息", e.message); } }
查询参数说明
逻辑运算符
名称 | 描述 |
---|---|
$and | 使用逻辑 and 连接字段,返回与这两个字段条件匹配的数据 |
$or | 使用逻辑 or 连接字段,返回与任一个字段条件匹配的数据 |
示例1:
{ "$and": [ { "key": { "$eq": "val" } } ] }
示例2:
{ "$or": [ { "$and": [ { "key": { "$eq": "val" } }, { "key2": { "$neq": 3 } } ] }, { "key3": { "$eq": 0 } } ] }
比较运算符
名称 | 描述 | 适用类型 |
---|---|---|
$eq | 匹配等于指定值的值 | 字符串,布尔值,数字 |
$neq | 匹配所有不等于指定值的值 | 字符串,布尔值,数字 |
$gt | 匹配大于指定值的值 | 数字 |
$gte | 匹配大于或等于指定值的值 | 数字 |
$lt | 匹配小于指定值的值 | 数字 |
$lte | 匹配小于或等于指定值的值 | 数字 |
$in | 匹配数组中指定的任何值 | 数组 |
$nin | 不匹配数组中指定的任何值 | 数组 |
示例1:
{ "$and": [ { "key": { "$eq": "val" } } ] }
示例2:
{ "$and": [ { "key1": { "$in": [ "foo", "bar" ] } }, { "key2": { "$in": [ 1, 2 ] } } ] }
特殊运算符
名称 | 描述 | 适用类型 | 说明 |
---|---|---|---|
$search | 模糊查询 | 字符串 | 性能较差,尽量避免使用 |
$nsearch | 不包含,会把 null 值查找出来 | 字符串 | 性能较差,尽量避免使用 |
$eq-current-user | 等于当前用户 | 字符串 | - |
$ne-current-user | 不等于当前用户 | 字符串 | - |
$empty | 数据为 null | 任意类型 | - |
$nempty | 数据不为 null | 任意类型 | - |
示例1:
{ "$and": [{ "key": { "$search": "val" } }] }
示例2:
{ "$and": [{ "key": { "$nsearch": "val" } }] }
示例3:
{ "$and": [{ "key": { "eq-current-user": "val" } }] }
示例4:
{ "$and": [{ "key": { "ne-current-user": "val" } }] }
示例5:
{ "$and": [{ "key": { "$empty": 1 } }] }
示例6:
{ "$and": [{ "key": { "$nempty": 1 } }] }
说明
$empty
、$empty
在 mongo 中,会查询字段不存在和字段值为 null 的两种情况。
常见错误说明
标识[xxx]必填参数未填
xxx 字段被设置未必填属性时,如果参数的值没取到,就会出现这个错误。一般在返回的错误里有 errRecord 字段。例如 errRecord:{"foo":"bar"} 。 可以看到 errRecord 中不存在 xxx 字段。所以必填校验失败