uni-app中JQL联表查询,当副表有权限限制的时候,应该怎么写where语句?

uni-app中JQL联表查询,当副表有权限限制的时候,应该怎么写where语句?

查询条件示例

db.collection('biz-fav')  
.where('user_set == 0 && status == 0')  
.field('card,name,update_time')  
.orderBy('update_time desc')  
.getTemp(),  

db.collection('biz-card')  
.where('status == 0')  
.field('_id,company,name,tel,product,fav_times,user_set,status,update_time')  
.getTemp()  

主表"read": true
副表"read": (doc.status == 0)

试了很多种写法,都提示权限不足,猜测是因为主表中取出的数据中外键指向副表的,副表的那条数据是status != 0的原因,但是如何写where才能避免这样呢?

PS:刚试了一下,老的虚拟联表的方法是可以查询到的,但是按照官方说法,主表数据量大的情况下,性能会很糟糕;

那么问题就是,新的临时表(getTemp)的方法只考虑了主表的过滤,而未考虑副表的过滤,如果副表需要过滤的情况下,使用临时表(getTemp)的方式是无法通过权限校验的,请问这是bug还是说有什么更深层次的考虑?


更多关于uni-app中JQL联表查询,当副表有权限限制的时候,应该怎么写where语句?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

Bug已确认,感谢反馈

更多关于uni-app中JQL联表查询,当副表有权限限制的时候,应该怎么写where语句?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


线上已修复,可以通过上传schema触发更新,HBuilderX内置的uniCloud插件会在下个版本修复

HBuilderX Alpha 3.4.6 已修复

在 uni-app 中使用 JQL(JavaScript Query Language)进行联表查询时,如果副表有权限限制,你需要在 where 语句中明确指定副表的查询条件,以确保查询结果符合权限要求。

假设你有两个集合:mainTablesubTable,并且 subTable 有权限限制。你想查询 mainTable 中的数据,并与 subTable 进行联表查询,同时确保 subTable 的查询结果符合权限限制。

以下是一个示例,展示了如何在 where 语句中处理副表的权限限制:

const db = uniCloud.database();

db.collection('mainTable')
  .where({
    // 主表的查询条件
    status: 'active'
  })
  .field('mainField1, mainField2, subTable.subField1, subTable.subField2') // 选择需要的字段
  .get({
    getSub: {
      from: 'subTable', // 副表名称
      where: {
        // 副表的查询条件,包括权限限制
        userId: 'currentUserId', // 例如:只查询当前用户的数据
        status: 'approved' // 副表的其他查询条件
      },
      as: 'subTable' // 联表查询结果的别名
    }
  })
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.error(err);
  });
回到顶部