uni-app jql 数据库运算方法在主表字段管用 副表不管用

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

uni-app jql 数据库运算方法在主表字段管用 副表不管用

产品分类:
uniCloud/腾讯云

示例代码:

let sql1 = db.collection('ketang-parent').where(
'status==1 && displayorder>=0 && recommendArr in[10]').field("id,bookname,price,images,recommendArr")
.getTemp()
let sql2 = db.collection('ketang-son').field("parentid").getTemp()
db.collection(sql1, sql2).field("bookname,isArray(id['ketang-son']) as isA,id").get()  

使用isArray是正确的

let sql1 = db.collection('ketang-parent').where(
'status==1 && displayorder>=0 && recommendArr in[10]').field("id,bookname,price,images,recommendArr")
.getTemp()
let sql2 = db.collection('ketang-son').field("parentid").getTemp()
db.collection(sql1, sql2).field("bookname,size(id['ketang-son']) as isA,id").get()  

使用size就报错

操作步骤:

统计副表数组的数量报错,统计主表的正确

预期结果:

可以统计副表的条数

实际结果:

统计主表可以 统计副表失败,不知道是副表原因还是表名原因

bug描述:

jql 数据库运算方法在主表字段管用 副表不管用
比如size




3 回复

在所有记录里面 _id[‘ketang-son’] 都是存在的吗


是的 都有记录值 下面贴出结果 isArray(id[“ketang-son”]) as isA 返回了false { “_id”: “0a4ec1f962943209077b00b22075b83d”, “bookname”: “【精品系列课】”, “id”: { “_value”: 264, “ketang-son”: [ { “_id”: “b69f67c0629434330519a24a37808e60”, “parentid”: 264 }, { “_id”: “f6e08a646294343305bd355606bbe671”, “parentid”: 264 }, { “_id”: “6d85a2b9629434340788b55e1770f3f4”, “parentid”: 264 }, { “_id”: “8f75309d62943434061601fb4a987d06”, “parentid”: 264 }, { “_id”: “b69f67c0629434350519a26776b2f0cf”, “parentid”: 264 }, { “_id”: “0a4ec1f962943437077b68891735110d”, “parentid”: 264 }, { “_id”: “0ab5303b6294343706a9a6655f02d3bd”, “parentid”: 264 }, { “_id”: “16db756f62943438050d297d146fd1f5”, “parentid”: 264 }, { “_id”: “058dfefe62943438063f55be185fb8d1”, “parentid”: 264 } ] }, “isA”: false, “recommendArr”: [ 2, 10 ] }

在使用 uni-appJQL(JavaScript Query Language)进行数据库查询时,如果发现主表的字段运算方法有效,而副表的字段运算方法无效,可能是由于以下几个原因导致的:

1. 字段路径问题

  • 主表字段:在 JQL 中,主表的字段可以直接通过字段名访问,例如 fieldName
  • 副表字段:副表的字段需要通过关联关系来访问,例如 relationName.fieldName。如果路径写错了,运算方法可能不会生效。

解决方案:确保副表字段的路径正确,例如:

const res = await db.collection('mainTable')
  .where('relationTable.fieldName > 10')
  .get()

2. 关联关系未正确建立

  • 如果主表和副表之间的关联关系没有正确建立,副表的字段可能无法被正确查询。

解决方案:检查数据库中的关联关系,确保主表和副表之间有正确的关联字段。

3. 运算方法不支持副表字段

  • 某些运算方法可能只支持主表字段,不支持副表字段。

解决方案:查阅 JQL 的官方文档,确认所使用的运算方法是否支持副表字段。如果不支持,可以考虑在查询后对结果进行二次处理。

4. 数据库权限问题

  • 如果副表的字段权限设置不正确,可能导致运算方法无法生效。

解决方案:检查数据库的权限设置,确保当前用户有权限访问和操作副表的字段。

5. JQL 版本问题

  • 不同版本的 JQL 可能对副表字段的支持程度不同。

解决方案:确保使用的 JQL 版本是最新的,或者查阅对应版本的文档,了解对副表字段的支持情况。

6. 查询条件问题

  • 如果查询条件中副表字段的运算方法写错了,也可能导致运算方法无效。

解决方案:仔细检查查询条件,确保副表字段的运算方法使用正确。

示例代码

以下是一个示例代码,展示如何在 JQL 中正确使用主表和副表的字段进行查询:

const res = await db.collection('mainTable')
  .where('relationTable.fieldName > 10') // 副表字段的运算方法
  .field('mainField, relationTable.fieldName') // 选择需要的字段
  .get()
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!