mongoose + express写自查寻接口时,以递归格式多级查询或aggregate查询

3 篇文章 0 订阅
文章介绍了在MongoDB中处理自联结的两种方法:一是使用aggregate查询进行多级嵌套的自联结,适用于层级结构的数据获取;二是利用递归函数遍历数据,构建层级分类。示例代码分别展示了这两种方法在获取三层部门分类信息时的应用。
摘要由CSDN通过智能技术生成

第一种 aggregate查询

表结构

在这里插入图片描述

接口编写

router.get("/get_depart", async (req, res) => {
  let data = await departModel.aggregate([
    {
      $lookup: {
        from: "depart",
        localField: "_id",
        foreignField: "did",
        as: "children",
        pipeline:[
          {
            $lookup: {
              from: "depart",
              localField: "_id",
              foreignField: "did",
              as: "children",
              pipeline:[
                {
                  $lookup: {
                    from: "depart",
                    localField: "_id",
                    foreignField: "did",
                    as: "children",
                  }
                }
              ]
            }
          }
        ]
      }
    },
    {$match:{level:1}}
  ])
  res.send({
    code:200,
    data
  })
})

第二种 递归函数

使用时将其中所有的mid改成你的表自联结字段即可

在这里插入图片描述

router.get('/get_materialfy', async (req, res) => {
    try {
        cate = await materialClassfyModel.find().lean();
        let d = {}
        cate.forEach(i => {
            d[i._id] = i.mid;
        })
        /* 使用递归函数查询三级商品分类的信息 */
        function getCate(arr, fid = '') {
            return arr.filter(item => {
                if (('mid' in item ? item.mid.toString() : '') === fid.toString()) {
                    // item.fname = fid != '' ? d[fid] : '';
                    item.children = getCate(arr, item._id);
                    return true;
                }
            })
        }
        data = getCate(cate);
        res.send({
            code: 200,
            data
        })
    } catch (err) {
        console.log(err)
        return err
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值