联表查询在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子表,结果都一样

Image 1
Image 2
Image 3


更多关于联表查询在uni-app中查询条件是子表字段时返回空的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

查询子表使用临时表查询,看下文档: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()
回到顶部