支付宝云不支持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条件运算在阿里云正常但在支付宝云报错,确实属于平台差异。

建议的临时解决方案:

  1. 改用原生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;
}
  1. 或者在后端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;
}
回到顶部