uni-app中支付宝云为什么不支持JQL常用运算方法?

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app中支付宝云为什么不支持JQL常用运算方法?

代码示例

let wallTemp = db.collection("demo-wallpaper").getTemp();  
let classTemp = db.collection("demo-classify").getTemp();    
let res = await db.collection(wallTemp, classTemp).field(`picurl, description, arrayElemAt(classid.name, 0) as classname`).get();     
console.log(res);

如上所示代码,进行临表查询,正常阿里云使用 arrayElemAt(classid, 0) as classname,可以直接获取到数组对象中的 name 的值,但是使用支付宝云获取到的结果是 classname: {value: Array(2)}

难道支付宝云不支持这种 JQL 常用运算方法吗???


33 回复

HBuilderX 4.41.2024121203-alpha 已修复。


你骗人,根本就没修复。我看别人的文档以为是免费版的bug,就买了支付宝云的收费版,还是一样的问题。不支持就不支持嘛,发版要发到2025年吗

回复 蔷薇花盛开: 你是本地运行还是云端运行?

已知问题,已反馈支付宝云修复。

大概多久能修复知道吗,正在使用着那

回复 咸虾米: 支付宝那边已经修复,等待他们发版

回复 DCloud_uniCloud_CRL: 好的,感谢大佬

回复 DCloud_uniCloud_CRL: 大佬,都好几天了,支付宝云还不发版,解决JQL运算方法的问题呀?

回复 咸虾米: 他们应该有自己的发版节奏,再等等。

回复 DCloud_uniCloud_CRL: 大佬,支付宝云好像发版了,问题没解决,现在arrayElemAt(userid,0),都直接报错了,^^

回复 咸虾米: 目前我这边没有收到他们发版的消息,你是在哪里看到的。

回复 DCloud_uniCloud_CRL: 因为之前那么写不报错,现在这么写就报错了,我还以为发版了那,以为他们越改越错那,哈哈。

回复 咸虾米: [0].classname直接渲染,

都一个月了,支付宝云还没发版呀,还不支持那,还建议使用支付宝云吗?

这个修护重要!!!

原来,如表 ****.chema.json 还是上传一下,才能触发更新!

12月25号啦,圣诞节啦,还没修复呢亲

是还有问题吗?

回复 DCloud_uniCloud_CRL: 支付宝云,获取不到用户昵称: nickname: $.arrayElemAt(["$userList.nickname", 0]),

大佬,是不支持这种方式获取吗?我其他的项目都能获取到也是支付宝云

你这是要获取联表的nickanme值嘛

回复 hws007: 是啊

上面官方说了HBuilderX 4.41.2024121203-alpha 已修复。再等等正式版吧,还是先用传统方式,获取过来再遍历吧

回复 李白丨: min(userList.nickname) as nickname 你这样写

回复 咸虾米: 25年1月2号 跟着老师的课程试了下arrayElemAt(classid,0) as class能正常返回对象,在html里面用<view class="name">{{item.class.name}}</view>倒是正常,但是还是没法做到像老师示例那样arrayElemAt(classid.name,0) as classname

回复 5***@qq.com: 说是支付宝云发版了,但是好像还没有修复

回复 咸虾米: 嗯嗯 那我还是先暂时用arrayElemAt(classid,0) as class的方式了,虽然请求里response的数据还是一样多但是至少比{{item.classid[0].name}}来的舒服

回复 5***@qq.com: 可以在map循环遍历一次

回复 咸虾米: 现在不用遍历,arrayElemAt(classid,0) as class目前不会返回数组,是class对象,但是虽然arrayElemAt可以用了,但是现在是越改越坏了,现在的问题是classid.name没法正常返回,老师视频里面那种classid.name as classname直接返回为空了,原先只是取值恶心点 不好看,现在等于从表的整个对象都返回,多取了很多没必要的字段,浪费流量了,更恶心了

回复 咸虾米: 不过我现在用的是免费版支付宝云,不确定classid.name as classname查询不出来是否是免费版支付宝云特有的情况,等我用付费版支付宝云的时候会回来试验的

支付宝云问题好多.今天试了下,联表查询时以副表字段进行查询会出错.以官网文档的例子来运行都出错.而且官网的book和order那个未例的语法还是错的,少了个逗号.这也太不严谨了吧.

有问题我觉得都能理解,毕竟功能也比阿里云多,但是一个问题修了两三个月,还没修好这我是觉得不太能接受的。这哪里敢用支付宝云上线,不得被坑死

在探讨uni-app中支付宝云不支持JQL(JSON Query Language,一种用于查询和操作JSON数据的语言)常用运算方法的问题时,我们首先需要理解uni-app和支付宝云的集成方式以及JQL在不同平台上的实现差异。

背景理解

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、H5、以及各种小程序(包括支付宝小程序)。而支付宝云是阿里云针对支付宝小程序提供的一站式后端云服务,它提供了包括数据库、云函数、文件存储等在内的多种后端能力。

问题分析

  1. 平台限制:不同的小程序平台(如微信小程序、支付宝小程序等)对后端服务的支持和集成方式有所不同。支付宝云虽然提供了丰富的后端服务,但可能并不完全兼容或支持所有JQL的运算方法。

  2. JQL实现差异:JQL本身可能在不同平台上有着不同的实现版本或支持程度。支付宝云可能基于自身的技术栈和服务需求,对JQL进行了定制或裁剪。

  3. API设计:支付宝云可能更倾向于提供RESTful API或其他形式的接口来访问和操作数据,而不是直接支持JQL查询。

代码案例

鉴于支付宝云可能不支持JQL常用运算方法,我们可以通过使用支付宝云提供的API来实现类似的功能。以下是一个使用支付宝云RESTful API进行数据查询的示例代码(假设使用JavaScript/Node.js环境):

const axios = require('axios');

async function queryData(appId, appPrivateKey, accessToken, tableName, query) {
  const url = `https://openapi.alipay.com/gateway.do`;
  const method = 'POST';
  const appPublicKey = 'your_app_public_key'; // 替换为你的应用公钥
  const alipayPublicKey = 'your_alipay_public_key'; // 替换为支付宝公钥

  const data = {
    biz_content: {
      table_name: tableName,
      query: query,
    },
    app_id: appId,
    method: 'alipay.cloud.db.query',
    format: 'JSON',
    charset: 'utf-8',
    sign_type: 'RSA2',
    timestamp: new Date().toISOString().replace(/[:.\-Z]/g, ''),
    version: '1.0',
    auth_token: accessToken,
  };

  // 这里需要添加签名逻辑,省略具体实现
  // ...

  try {
    const response = await axios({
      url,
      method,
      data: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json',
      },
    });
    return response.data;
  } catch (error) {
    console.error('Error querying data:', error);
    throw error;
  }
}

// 使用示例
queryData('your_app_id', 'your_app_private_key', 'your_access_token', 'your_table_name', { /* your query params */ })
  .then(result => console.log(result))
  .catch(error => console.error(error));

请注意,上述代码仅为示例,实际使用时需要根据支付宝云的API文档完善签名逻辑和错误处理。

回到顶部