微信小程序开发 多表关联 并实现数据分组

文章描述了一个使用MongoDB的聚合查询功能,从pictureSetRelationShip表中通过lookup操作关联pictureSet和picture表,筛选特定条件(如jxfl),最终获取套装下的多张图片列表。
摘要由CSDN通过智能技术生成
  • 需求

三个表,图片表(picture)、套装表(pictureSet),套装图片关联关系表(pictureSetRelationShip)

  • 图片表(picture)表数据

  • 套装表

  • 关联关系表

关系表中存在多条记录,一个setId可能会有多个pictureID与之对应,如下

  • 期望得到的结果

即希望能够得到一个套装下包含多个picture

{"list":[{"_id":"setName","tzitemPictureList":[

[{"_id":"f18e14fa6524ee6801cd6cd2d","bh":"ceshitaozhuang","detailUrl":"cloud://wanyfbgkybgsvd882fb24-1319293858/1696919142576-450648328.png","jxfl":"玄关/客厅/餐厅","sfjx":false,"sftz":true,"tzTags":true,"url":"cloud://wanyi-3-wanyi-3gkybgsvd882fb24-1319293858/1696919142576-450648328.png","_openid":"one555SeKH4gTdMZQ"}],

[{"_id":"8de6ebcc6524ee680639cddf65bd85c0","sfjx":false,"sftz":true,"tzTags":true,"url":"cloud://wanyi-3wanyi-3gkybgsvd882fb24-1319293858/1696919142577-760341536.png","_openid":"one555SeKH4gUvdMZQ","bh":"ceshitaozhuang","detailUrl":"cloud://wanyi-61-wa82fb24-1319293858/1696919142577-760341536.png","jxfl":"玄关/客厅/餐厅"}]]}],"errMsg":"collection.aggregate:ok"}

  • 云函数
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 云函数入口函数
exports.main = async (event, context) => {
  // const wxContext = cloud.getWXContext()
  let $ = cloud.database().command.aggregate;
  let db = cloud.database();

  // pictureset、pictureSetRelationShip、picture三表关联
  return db.collection('pictureSetRelationShip').aggregate()

  .lookup({
    from: 'pictureSet',
    localField: 'setId',
    foreignField: '_id',
    as: 'relationList',
  })
  .replaceRoot({
    //replaceRoot指定⼀个已有字段作为输出的根节点,也可以指定⼀个计算出的新字段作为根节点。
    //newRoot  代表新的根节点,//$.mergeObjects([]) 可以合并多个元素
    newRoot: $.mergeObjects([$.arrayElemAt(['$relationList', 0]), '$$ROOT'])
    // arrayElemAt
    //就是取relationList数组的第⼀个元素,与原始的根融合在⼀起
  })
  . project({
    //project把指定的字段传递给下⼀个流⽔线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段            
    relationList: 0
  })
  .match({
    jxfl: event.searchtype
  })
 .lookup({
    from: 'picture',
    localField: 'pictureID',
    foreignField: '_id',
    as: 'tzitemPictureList',
  })
  .group({
    // 按照setName分组,将tzitemPictureList拼接到一起,形成新的数组
    _id: '$setName',
    bh: $.first('$bh'),
    tzitemPictureList: $.addToSet('$tzitemPictureList')
  })
  .end({
    success:function(res){
      return res; 
    },
    fail(error) {
      return error;
    }
  })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值