名图客
名图客
  • 发布:2021-03-08 23:26
  • 更新:2021-03-09 09:55
  • 阅读:898

【报Bug】JQL查询 where查询与外键问题

分类:uniCloud

产品分类: uniCloud/腾讯云

操作步骤:

第一个问题:where('uid==123').field("uid{name,logo}, info,price").get()
第二个问题:where("uid==123").field("follower{name,logo},name,logo").get()

预期结果:

第一个:{uid:[data],info,price}
第二个:{follower:[{_id,name,logo}],_id, name,logo}

实际结果:

第一个:{info,price} 问题出在外键作为查询字段时无法返回
第二个:{follower:[{name,logo}], _id,name,logo} 问题出在follower外键字段需指定_id才会返回

bug描述:

两个问题:
第一问题:当用where查询,比如:where("uid=='123'") uid作为查询条件,那么在field字段uid外键关联,如field("uid{name,logo},")时,无法返回uid外键信息。这就造成我在数据表里不得不建立两个相同内容的字段,一个uid,用做查询,一个user用作外键关联信息返回。

第二问题:where("uid=='123'"), 自动会返回 _id字段,field('name,logo,age')时,也会自动返回_id, 但是,当field("follower{name,logo},name,logo")时,无法自动返回follower的_id字段,需要手动指定。

这两个问题,不知是特意设计的还是其他原因造成的,文档里面没有关于这两问题的说明,试过才知道的。

2021-03-08 23:26 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
名图客

名图客 (作者)

如果外键不能作为查询条件,或者说无法与查询条件一起共用,那么会是一件很悲剧的事情,比如一个订单,里面包含商铺id,下单用户id,商品id,支付订单id,那么几个id如果要关联外键信息,又得单独建立重复内容的外键字段,做为获取关联信息时的存储字段。

  • DCloud_uniCloud_WYQ

    外键关联的表内理应一定存在数据。比如用户表和文章表,文章表内author指向用户表的_id,而不能反过来将用户表的_id指向文章表的author,这样的话where内就可以写uid.id == '123'来查询。逆外键查询还在排期中

    2021-03-10 15:48

  • 名图客 (作者)

    回复 DCloud_uniCloud_WYQ:

    uni.db('article,users')

    .where('uid == "79550af260424b4008826a1125614fb0"')

    .field('uid{name,avatar},title,html')

    .get()

    就按你说的,用户表和文章表,文章内作者的uid指向用户表的_id,这个应该不是逆外键查询吧。

    当去掉field里面的uid{name,avatar}时,可以返回数据,或者where的查询条件用其他的,而不用uid,都没问题。

    所以,我的问题是,当需要用field获取外键数据时,那个字段不能同时作为查询条件。而非你指的逆外键查询。

    2021-03-10 16:22

  • 名图客 (作者)

    回复 DCloud_uniCloud_WYQ:

    uni.db('article,users')

    .where('uid == "79550af260424b4008826a1125614fb0"')

    .field('title,html')

    .get()

    去掉field里面的uid后,这个常规的逻辑就是这样,给定一个用户id,获取他的文章。

    在field里面加入uid{name,avatar}获取文章的同时,获取他的头像和名称,但是却无法返回数据,报错了。

    2021-03-10 16:29

  • 名图客 (作者)

    回复 DCloud_uniCloud_WYQ: uid.id == '123' 可以返回数据,谢谢,问题解决了。

    2021-03-11 10:05

  • 名图客 (作者)

    建议在文档里说明一下这种用法,避免其他人踩坑,jql的外键确实好用。

    2021-03-11 10:15

名图客

名图客 (作者)

还有个问题,需要了解一下。在使用如field('uid{name,logo}')外键关联查询时,注意到uid返回的是数组结构,这意味着如果外键关联的是非_id字段,如follow_id,那么,使用field外键关联查询时,返回的可能数组数量会不定或很大,那么,这如何控制单次查询的数量,这个数量是与顶级的limit一致还是什么情况。
其次就是,这个返回数组的外键字段,如何在不需要返回数组的情况下返回统计数据,类似顶级的getCount,这些似乎文档都没说明。还是暂时没有往这块延伸。

  • DCloud_uniCloud_WYQ

    目前无法限制关联表的返回数量,外键最初设计的是关联表应返回一条与主表对应的数据,如果主表内的字段是数组则返回多条。逆外键查询还正在排期中

    2021-03-10 15:46

该问题目前已经被锁定, 无法添加新回复