数据模型V2 API
$w.cloud.callDataSource
$w.cloud.callDataSource(params: ICallDataSourceParams): Promise<any>
功能描述
调用数据源,包括数据模型及 APIs
入参
params: ICallDataSourceParams
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
dataSourceName | string | 无 | 是 | 数据源标识 |
methodName | string | 无 | 是 | 数据源方法名 |
params | object | 无 | 是 | 方法参数,根据方法实际入参填写 |
如果数据源是数据模型,因为其方法皆由平台提供,其可用的数据源方法(methodName)是:
- 新增:
wedaCreateV2
- 新增多条:
wedaBatchCreateV2
- 删除:
wedaDeleteV2
- 删除多条:
wedaBatchDeleteV2
- 更新:
wedaUpdateV2
- 更新多条:
wedaBatchUpdateV2
- 查询:
wedaGetItemV2
- 查询多条:
wedaGetRecordsV2
方法入参结构及示例
示例数据源学生表模型标识
xs
,其数据结构如下:
示例数据源课程表模型标识
kc
,其数据结构如下:
示例数据源课程表模型标识
bj
,其数据结构如下:
新增(wedaCreateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | { [key: string]: any; } | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
出参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
id | string | 无 | "7L5G32U9PE" | 是 | id 为对应创建数据源数据对应的标识 |
string | 无 | "7L5G32U9PE" | 是 | Id 为对应创建数据源数据对应的标识(后续废弃 ) |
可视化开发编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaCreateV2",
params: {
data: {
xm: "张三",
xh: "001",
yx: "zhangsan@weda.io"
},
},
});
console.log("请求结果", data); // {id: "AJ16RAPJJU"}
} 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);
}
}
添加关联关系(新)
仅V2接口支持新版关联关系。
仅有MySQL环境支持多对多关联关系
增加多对一关联
多对一场景为: 一个班级中有多个学生,一个学生只存在于一个班级中。
插入一条姓名为“李四”,邮箱为“lisi@weda.io”,班级为“二班”的数据,其中在“班级”表中,“二班”的数据标识为“AJ14X0RM68”
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaCreateV2",
params: {
data: {
xm: "李四",
yx: "zhangsan@weda.io",
ssbj: {_id: "AJ14X0RM68"}
},
},
});
console.log("请求结果", data); // {id: "AK7FTHDK60"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}
通过wedaGetItemV2 查询结果得到,证明数据已经插入成功
{
"owner": "1818542018903592962",
"createdAt": 1734422281567,
"createBy": "1818542018903592962",
"xm": "李四",
"updateBy": "1818542018903592962",
"_openid": "1818542018903592962",
"_id": "AK7FTHDK60",
"yx": "zhangsan@weda.io",
"updatedAt": 1734422281567
}
增加一对多关联
在班级表中,插入学生名单相关数据
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "bj", // 数据模型标识
methodName: "wedaCreateV2",
params: {
data: {
mc: "五班",
xsmd: [{_id: "AK7JFD4HMJ"},{_id: "AK7JD905TN"}]
},
},
});
console.log("请求结果", data); // {id: "AK7K6YN57W"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}
通过wedaGetItemV2 查询结果得到,证明数据已经插入成功
{
"owner": "1818542018903592962",
"createdAt": 1734423562200,
"createBy": "1818542018903592962",
"updateBy": "1818542018903592962",
"mc": "五班",
"_openid": "1818542018903592962",
"_id": "AK7K6YN57W",
"updatedAt": 1734423562200
}
增加多对多关联
在班级表中,插入学生名单相关数据
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "kc", // 数据模型标识
methodName: "wedaCreateV2",
params: {
data: {
"mc": "化学",
"kcmd": [
{
"_id": "AK7JFD4HMJ"
},
{
"_id": "AK7JD905TN"
},
{
"_id": "AK7FTHDK60"
}
]
}
},
});
console.log("请求结果", data); // {id: "AK7M5FG7DS"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}
通过wedaGetItemV2 查询结果得到,证明数据已经插入成功
{
"owner": "1818542018903592962",
"createdAt": 1734424299807,
"createBy": "1818542018903592962",
"updateBy": "1818542018903592962",
"mc": "化学",
"_openid": "1818542018903592962",
"_id": "AK7M5FG7DS",
"updatedAt": 1734424299807
}
新增多条(wedaBatchCreateV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
data | { [key: string]: any }[] | 无 | [{name: "juli"}] | 是 | 不能为空数组, 传入空对象会被忽略 |
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
idList | idList: string[] | 无 | ["7L5G32U9PE"] | idList 为对应创建数据源数据对应的标识列表 |
IdList: string[] | 无 | ["7L5G32U9PE"] | IdList 为对应创建数据源数据对应的标识列表(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaBatchCreateV2",
params: {
data: [{
xm: "李丽",
ssbj: {_id: "AK7K6YN57W"} // 多对一关联关系
},{
xm: "张伟",
ssbj: {_id: "AJ14Y4N7F6"}
}],
},
});
console.log("请求结果", data); // {"idList": ["AK7T9UHC4Y","AK7T9UHC4Z"]}
} 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: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功。(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaUpdateV2",
params: {
"data": {
"xh": 9,
"yx": "wangyan@weda.io"
},
"filter": {
"where": {
"$and": [
{
"_id": {
"$eq": "AK7WCGAVJ8"
}
}
]
}
},
}
});
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);
}
}
添加关联关系(新)
传参方式与创建单条类似,具体可参考上文
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaUpdateV2",
params: {
"data": {
"xh": 9,
"yx": "wangyan@weda.io",
"ssbj": {_id: "AJ14X0RM68"}, // 多对一
"kcb": [{_id: "AJ152PHD84"}] // 多对多
},
"filter": {
"where": {
"$and": [
{
"_id": {
"$eq": "AK7WCGAVJ8"
}
}
]
}
},
}
});
console.log("请求结果", data); // {"id": "8PYNQU78XS"}
} 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: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaBatchUpdateV2",
params: {
"data": {
"yx": "zhang@weda.io",
},
"filter": {
"where": {
"$and": [
{
"xm": {
"$eq": "张三"
}
}
]
}
},
}
});
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: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaDeleteV2",
params: {
"filter": {
"where": {
$and: [
{
_id: {
$eq: "AK7WCGAVJ8",
},
},
],
}
},
}
});
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: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功(后续废弃 ) |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "xs", // 数据模型标识
methodName: "wedaBatchDeleteV2",
params: {
"filter": {
"where": {
$and: [
{
_id: {
$in: ["AK7ZRXKJMN","AJ16RAPJJU"],
},
},
],
}
},
}
});
console.log("请求结果", data); // { count: 2 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}
查询(wedaGetItemV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
select | { [key: string]: boolean } | 无 | { $master: true } | 是 | 可以指定返回本表或者关联表的字段,如果想查询本表所有字段,请使用 { $master: true } |
compatibleWithV1 | boolean | false | 否 | 对旧关联关系的兼容,下面详细介绍 | |
relateWhere | 无 | 否 | 支持对数据模型对关联表进行查询 |
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);
}
}
如何使用复杂查询
编辑器 Javascript 代码示例 使用and逻辑进行查询
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",
},
},
{
name: {
$eq: "xxxx",
},
}
],
},
},
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);
}
}
针对时间范围进行查询
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetItemV2",
params: {
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where:{
$and: [
{
createdAt: {
$gte: new Date().setHours(0, 0, 0, 0)
}
},
{
createdAt: {
$lte: new Date().setHours(23, 59, 59, 999)
}
}
]
},
},
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 | 否 | 分页大小,建议指定,如需设置为其它值,需要和pageNumber配合使用,两者同时指定才会生效 |
pageNumber | number | 1 | 否 | 分页数目 |
orderBy | {[key: string]: "asc" "desc" }[] | 无 | 否 | 排序,当前仅支持最多 3 字段排序 |
compatibleWithV1 | boolean | false | 否 | 对旧关联关系的兼容,下面详细介绍 |
relateWhere | 无 | 否 | 支持对数据模型对关联表进行查询 |
请不要依赖协议中任何的默认值。
对于
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
值。
解释说明:
因为一些内部调整原因。将关联关系字段和主子明细字段作为 关联关系(旧)字段。其返回关联数据的方式通过特殊前缀
@
的方式进行返回。对于新关联关系,则是以关联关系字段本身作为返回。
如果需要返回关联表字段,需要在select中指定具体字段值,如
select: {name: true, age: true, relateSchool: {name: true, createBy: true}}
。 使用{$master:true}
这种写法,将不会返回关联表字段。
筛选主模型(当前模型)字段。
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);
}
}
筛选关联模型字段,筛选旧关联关系。
- 对于旧关联关系,尚不支持对关联表子字段的筛选。
- [什么是旧关联关系]{https://docs.cloudbase.net/lowcode/manage/model#关联关系详解}
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "student",
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: "student",
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: "student",
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);
}
}
relateWhere 详解
relateWhere
主要用来帮助进行方便的关联查询。通过设置relateWhere
,可以对关联表添加筛选条件。
- 当前仅对新关联关系生效
- [什么是新关联关系]{https://docs.cloudbase.net/lowcode/manage/model#关联关系详解}
示例
relateWhere
和 filter
中的where
查询结构本质相同。
new_glgx
为本表的关联字段
{
"where":{
},
"relateWhere":{
"new_glgx":{
"where":{
"$and":[
{
"name":{
"$eq":"1"
}
}
]
}
}
}
}
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetRecordsV2",
params: {
// 筛选内容,当前筛选的含义为:名字为 "juli" 或者 "foo"
filter: {
"where":{
},
"relateWhere":{
"new_glgx":{ // sjmx_ftf41oj 的关联字段
"where":{
"$and":[
{
"name":{ // 关联表中的字段
"$eq":"1"
}
}
]
}
}
}
},
// 返回字段选择
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);
}
}
创建或者更新(wedaUpsertV2)
入参结构
属性 | 类型 | 默认值 | 示例 | 必填 | 说明 |
---|---|---|---|---|---|
filter | { where: FilterObject} | 无 | {filter: {where: {}}} | 是 | 复杂查询结构 |
update | { [key: string]: any; } | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
create | { [key: string]: any; } | 无 | {name: "juli"} | 是 | 对应数据源的字段结构 |
FilterObject
为复杂查询结构,请参考查询参数说明当前支持修改一条数据,如果条件命中数据大于1,则会报错。
出参结构
属性 | 类型 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
count | count: 0 or 1 | 无 | 1 | 变更的条数,返回非 0 值代表更新成功 |
id | count: 0 or 1 | 无 | 1 | 变更的条数,返回非 "" 值代表创建成功 |
编辑器 Javascript 代码示例
export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "weda_example",
methodName: "wedaUpsertV2",
params: {
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "ad727431666988b900fb496319d19dd4", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
update:{
"email":"weda@tencent.com",
},
data:{
"address":"weda",
"email":"weda@tencent.com",
},
},
});
console.log("请求结果", data); // { count: 1, id: ""}
} 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 | 任意类型 |
$empty
,$nempty
在 mongo 中,会查询字段不存在和字段值为 null 的两种情况。
示例1.1
{
"$and": [
{
"key": {
"$search": "val"
}
}
]
}
示例1.2
{
"$and": [
{
"key": {
"$nsearch": "val"
}
}
]
}
示例2.1
{
"$and": [
{
"key": {
"eq-current-user": "val"
}
}
]
}
示例2.2
{
"$and": [
{
"key": {
"ne-current-user": "val"
}
}
]
}
示例3.1
{
"$and": [
{
"key": {
"$empty": 1
}
}
]
}
示例3.2
{
"$and": [
{
"key": {
"$nempty": 1
}
}
]
}
FAQ
1. 标识[xxx] 必填参数未填
xxx 字段被设置未必填属性时,如果参数的值没取到,就会出现这个错误。一般在返回的错误里有errRecord字段。比如errRecord:{"foo":"bar"} 。 可以看到比如errRecord中不存在xxx字段。所以必填校验失败。