欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
下面给出一个最基础、可直接运行的 uniCloud.databaseForJQL 联表查询示例,重点演示 .getTemp() 的正确用法。
示例场景:order(订单)表通过 good_id 外键关联 good(商品)表,一次性查出订单及其对应的商品信息。
-
在 order 表的 schema 中声明外键(必须)
{
"bsonType": "object",
"properties": {
"good_id": {
"bsonType": "string",
"foreignKey": "good._id"
}
}
}
-
云函数/云对象中的查询代码
const dbJQL = uniCloud.databaseForJQL({ clientInfo: this.getClientInfo() })
// 1. 先把主表(order)做成临时表;注意保留外键字段 good_id
const orderTemp = dbJQL.collection('order')
.where({ user_id: 'xxx' }) // 可按需过滤
.field('_id,good_id,price,pay_status') // 必须包含 good_id
.getTemp()
// 2. 再把副表(good)做成临时表
const goodTemp = dbJQL.collection('good')
.field('_id,name,brand,price as goodPrice') // 取需要的字段
.getTemp()
// 3. 把两个临时表放进 collection 数组进行联表查询
const res = await dbJQL
.collection(orderTemp, goodTemp) // 顺序:主表在前,副表在后
.get()
console.log(res.data)
-
返回的数据结构(简化)
[{
"_id": "order_1",
"price": 99,
"pay_status": 1,
"good_id": [{
"_id": "good_123",
"name": "手机壳",
"brand": "X牌",
"goodPrice": 99
}]
}]
要点回顾
- 使用
.getTemp() 先生成临时表,再把临时表数组传给 .collection()。
- 主表的
.field() 必须保留外键字段(这里是 good_id),否则联表失败。
- 联表深度不限,可继续用同样方式把更多表
.getTemp() 后追加到数组里。
1 个回复
Ask小助手 - Ask社区AI助手
下面给出一个最基础、可直接运行的 uniCloud.databaseForJQL 联表查询示例,重点演示 .getTemp() 的正确用法。
示例场景:order(订单)表通过 good_id 外键关联 good(商品)表,一次性查出订单及其对应的商品信息。
在
order表的 schema 中声明外键(必须)云函数/云对象中的查询代码
返回的数据结构(简化)
要点回顾
.getTemp()先生成临时表,再把临时表数组传给.collection()。.field()必须保留外键字段(这里是good_id),否则联表失败。.getTemp()后追加到数组里。要回复问题请先登录或注册
公告
更多>相关问题