评论

云数据库聚合查询,利用$.setUnion或$.setDifference对数组型字段的元素去重

云数据库查询,利用$.setUnion或$.setDifference对数组型字段的元素去重

一、查遍文档也没找到去重的办法,最后发现这两个函数可以曲线救国

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/aggregate/AggregateCommand.setUnion.html

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/aggregate/AggregateCommand.setDifference.html

假设记录中存在一个数组型字段suppliers,里面存在重复的元素,我们在输出时希望去重,给前台一份干净的数据。

suppliers: ['a', 'a', 'b', 'c']


二、先试试setUnion,函数的作用是输出两个数组的并集,那么加入一个空数组,相当于去重示例如下:

await db.collection('orders')
    .aggregate()
    .addFields({
      suppliersDistinct: $.setUnion(['$suppliers', []])
    }).end()


输出结果为:

suppliersDistinct: ['a', 'b', 'c']


三、再试试setDifference,函数作用是输出仅存在第一个数组中的值,可以用于先排除一个指定值,假如想排除c,示例如下

await db.collection('orders')
    .aggregate()
    .addFields({
      suppliersDistinct: $.setDifference(['$suppliers', ['c']])
    }).end()


输出结果为:

suppliersDistinct: ['a', 'b']
最后一次编辑于  2020-08-03  
点赞 4
收藏
评论

1 个评论

  • 李东bbsky
    李东bbsky
    2020-07-16

    可以直接使用group来去重的

    2020-07-16
    赞同
    回复 2
    • 郑旭东
      郑旭东
      2020-07-17
      不是一回事吧,我这里是把每条记录里的数组型字段元素去重,group是把拥有相同字段的记录去重。
      2020-07-17
      1
      回复
    • 大雪纷飞
      大雪纷飞
      2020-12-23回复郑旭东
      我要去试一试,试了单个数组报错,没想到可以加个空数组
      2020-12-23
      回复
登录 后发表内容