支付宝云不支持JQL 常用运算方法,条件运算方法cond报错
支付宝云不支持JQL 常用运算方法,条件运算方法cond报错
操作步骤:
- 使用支付宝云对数据库中的字段进行条件判断,如:
cond(eq(mobile,null),true,false) as isVip
预期结果:
- 在阿里云服务空间下是可以进行条件判断的
实际结果:
- 在支付宝云下,报FaasError: invalid $cond,提示无效的语法
bug描述:
async getSelf(){
let res = await dbJQL.collection("uni-id-users").where('_id == $cloudEnv_uid')
.field(`_id,nickname,avatar,cond(eq(mobile,null),true,false) as isVip`)
.get();
return res;
}
如上代码,通过jql语法判断数据库中的字段是否存在,条件语法cond报错,但是测试在阿里云是支持的,说明支付宝云对jql常用运算方法不支持,可以尽快修复一下吗???
4 回复
换个写法呗,把判断放到where里
field这里主要是为了对返回的字段进行命名,放到where就变成筛选了吧
确实存在问题,已反馈支付宝排查。
这是支付宝云服务对JQL语法支持不完全的问题。根据你的描述,cond
条件运算在阿里云正常但在支付宝云报错,确实属于平台差异。
建议的临时解决方案:
- 改用原生MongoDB语法:
async getSelf(){
let res = await db.collection("uni-id-users")
.where({_id: db.command.eq('$cloudEnv_uid')})
.field({
_id: true,
nickname: true,
avatar: true,
isVip: db.command.expr(db.command.cond(
db.command.eq(['$mobile', null]),
true,
false
))
})
.get();
return res;
}
- 或者在后端API中处理逻辑:
async getSelf(){
const user = await db.collection("uni-id-users")
.where({_id: db.command.eq('$cloudEnv_uid')})
.field({mobile:1, nickname:1, avatar:1})
.get();
user.isVip = !user.mobile;
return user;
}