zoezy
zoezy
  • 发布:2023-09-19 18:03
  • 更新:2024-06-05 17:44
  • 阅读:207

uniCloud联表统计

分类:uniCloud

功能:通讯录群组列表,联表查询时怎么把每组下人员数量作为一个新字段放入表中呢?

目前unicloud-db中collection,
collectionList: [
db.collection('contacts-groups').field('_id,name').getTemp(),
db.collection('contacts').where('create_by==$cloudEnv_uid').field('groups').getTemp()
],

看文档JQL语法联表查询时没有count方法,是要用云对象拿contacts-groups的id一个个查吗
db.collection('contacts').where('create_by==$cloudEnv_uid&&groups=${contacts-groups的id}').count()

2023-09-19 18:03 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

在联表后的虚拟表内field方法使用size数据库运算方法,得到匹配到的副表记录数量

  • d***@dufan.cool

    大哥,能不能写个 例子 哈哈哈!!!

    2024-05-25 15:50

  • alafafa

    这样还是会把副表里面的所有数据拉出来啊,假如我 user 为主表,article 为副表,我在用户的列表页只是想知道这个用户发表了多少篇文章,比如这个用户发表了 500 篇文章,我只是需要在列表了显示 500 字样就可以了,而不是把这 500 篇文章的数据都给拉下来啊。难道只能事先在主表里预设一个字段来统计数量,发表文章时在副表的 afterCreate 里通过db.command.inc(1) 更新主表,删除文章时在副表的 afterDelete 里通过db.command.inc(-1)更新主表字段这一种方式解决吗?

    2024-06-05 18:02

d***@dufan.cool

d***@dufan.cool


这个 size 怎么统计 副表的数据?

d***@dufan.cool

d***@dufan.cool

const usersQ = dbJql.collection('d_users').where(`groupId == "${gid}"`).getTemp()  
const segmentsTotalQ = dbJql.collection('d_segments').getTemp()  
const res = await dbJql.collection(usersQ,segmentsTotalQ).field(`nickname, size(_id.d_segments) as segmentCount`).get()

我写出来了,但怎么把 _id 排除掉,不要查询 。

alafafa

alafafa

这样还是会把副表里面的所有数据拉出来啊,假如我 user 为主表,article 为副表,我在用户的列表页只是想知道这个用户发表了多少篇文章,比如这个用户发表了 500 篇文章,我只是需要在列表了显示 500 字样就可以了,而不是把这 500 篇文章的数据都给拉下来啊

  • DCloud_uniCloud_WYQ

    你的需求其实和上面发的一样也是要过滤掉_id是吧,可以试试下面这样的写法


    db.collection(usersQ, segmentsTotalQ).field({  
    _id: false,
    size: $.size('$_id.d_segments'),
    nickname: true
    }).get()

    2024-06-11 11:20

要回复问题请先登录注册