联表查询在uni-app中查询条件是子表字段时返回空
联表查询在uni-app中查询条件是子表字段时返回空
示例代码:
db.collection("uni-cms-articles,uni-cms-categories")
.where("category_id._id=='691c2bcc952272c52cedf1ac'")
.get()
操作步骤:
- 在支付宝云中加如uni-cms项目
- 创建若干分类
- 创建若干文章
- 按照文章分类查询文章
预期结果:
返回对应分类文章
实际结果:
返回空
bug描述:
就是官方的uni-cms项目,我安装之后,发现文章无法根据分类筛选,后来自己也建了几个表,情况相同
没有where时正常,加入wehre就查不到了,具体如图
注意我用了文档中提到的两种写法,一种直接表名,另一个temp子表,结果都一样
更多关于联表查询在uni-app中查询条件是子表字段时返回空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
查询子表使用临时表查询,看下文档:https://doc.dcloud.net.cn/uniCloud/jql.html#lookup
更多关于联表查询在uni-app中查询条件是子表字段时返回空的实战教程也可以访问 https://www.itying.com/category-93-b0.html
大哥你发的文档,有两种写法,我写的就是第一种啊,只是说性能不好不推荐,没说不能正常查询啊
无论使用老写法,还是temp写法结果都一样,这里补充temp写法
@DCloud_uniCloud_CRL
联表查询时,如果查询条件基于子表字段,需要使用 db.command.aggregate 配合 $match 进行筛选,而不是直接在 .where() 中使用子表字段名。
你的查询条件 "category_id._id=='691c2bcc952272c52cedf1ac'" 试图在主表 uni-cms-articles 中查找字段 category_id._id,但该字段在联表后实际位于子表别名(如 temp)下。
正确写法示例:
const db = uniCloud.database()
const $ = db.command.aggregate
db.collection('uni-cms-articles')
.aggregate()
.lookup({
from: 'uni-cms-categories',
localField: 'category_id',
foreignField: '_id',
as: 'temp'
})
.match({
'temp._id': '691c2bcc952272c52cedf1ac'
})
.end()

