收藏
回答

云开发 数据库如何去重?

我先贴下当前的进度

const shareList = (await db.collection('share_history').aggregate().match({
      photoCaseId
    }).group({
      _id: '$_openid'
    }).end())

这是打印shareList的结果,我有一个表,单独用来记录分享行为,但一个人可以产生多条分享行为,我在部分场景下,需要知道有多少个人分享了,以及这些人是谁(明细数据)

打个比方,共有32条分享记录,但是是只有3个人在分享,目前通过上述代码做了分组,可以查询出来是哪几个人分享了,但是我希望一步到位,把其他的信息也展示出来,而不是拿到id再查一次。

group这个方法,除了id,好像只能加统计信息,不能加其他属性

回答关注问题邀请回答
收藏

3 个回答

  • 王政娇
    王政娇
    2020-05-12

    暂时是这样处理的,以后有更好的方案,再优化。

    1、先group,获得openid

    2、for循环,通过openid查询到数据集,取第一条。

    3、将取到的数据重新组装成一个list

    4、end

    2020-05-12
    有用
    回复 2
    • 王政娇
      王政娇
      2020-05-12
      这种代码写得太难受了,感觉自己很蠢。
      2020-05-12
      回复
    • 王政娇
      王政娇
      2020-05-27回复王政娇
      更新一下:mergeObjects,这个函数可以解决。
      2020-05-27
      回复
  • Admin ²º²³
    Admin ²º²³
    2020-05-11
    end()前lookup一下:
    lookup({
      from: <要连接的集合名>,
      localField: <输入记录的要进行相等匹配的字段>,
      foreignField: <被连接集合的要进行相等匹配的字段>,
      as: <输出的数组字段名>
    })
    


    参考文档:Aggregate]((Aggregate)).lookup(object: Object): [Aggregate | 微信开放文档

    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html

    2020-05-11
    有用
    回复 7
    • 王政娇
      王政娇
      2020-05-11
      不行吧,我试过了
      2020-05-11
      回复
    • Admin ²º²³
      Admin ²º²³
      2020-05-11回复王政娇
      你lookup后忘记mergeObjects了吧,需要再mergeObjects
      2020-05-11
      回复
    • 王政娇
      王政娇
      2020-05-12回复Admin ²º²³
      问题是,lookup是联表查询,我这里只有一个表,难道collection和lookup写同一个表吗?(我尝试了,直接报权限错误)
      2020-05-12
      回复
    • 王政娇
      王政娇
      2020-05-12回复Admin ²º²³
      我现在只能按openid分组,但是openid是重复的,我即便关联表查询也没办法去重啊,至少要把id带上吧。
      2020-05-12
      回复
    • 王政娇
      王政娇
      2020-05-12
      2020-05-12
      回复
    查看更多(2)
  • Dream
    Dream
    2020-05-11

    可以用那个聚合啊lookup函数链表查询

    2020-05-11
    有用
    回复
登录 后发表内容
问题标签