You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB:在嵌套Pipeline Lookup中添加多条件匹配查询

实现MongoDB嵌套Pipeline Lookup的多条件关联筛选

需求是筛选出满足以下任一条件的所有dashboard文档:

  • 关联的templatefolders.name等于'folder'
  • 关联的templatefolders对应的folders.name等于'test1'

修改后的聚合查询代码

db.dashboard.aggregate([
  {
    $lookup: {
      from: "templatefolders",
      let: { "boardId": "$_id" },
      pipeline: [
        {
          $match: {
            $expr: { $eq: ["$dashboardId", "$$boardId"] }
          }
        },
        {
          $lookup: {
            from: "folders",
            let: { "folderId": "$folderId" },
            pipeline: [
              {
                $match: {
                  $expr: { $eq: ["$_id", "$$folderId"] }
                }
              }
            ],
            as: "joinFolder"
          }
        },
        // 添加条件匹配:保留满足任一条件的templatefolders
        {
          $match: {
            $or: [
              // 条件1:当前templatefolders的name为'folder'
              { name: "folder" },
              // 条件2:关联的folders中存在name为'test1'的文档
              {
                $expr: {
                  $anyElementTrue: {
                    $map: {
                      input: "$joinFolder",
                      as: "folder",
                      in: { $eq: ["$$folder.name", "test1"] }
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      as: "joinDashboard"
    }
  },
  // 过滤掉没有匹配到符合条件templatefolders的dashboard
  {
    $match: {
      $expr: { $gt: [{ $size: "$joinDashboard" }, 0] }
    }
  }
])

关键修改说明

  1. 在templatefolders的Pipeline中添加筛选逻辑:
    完成与folders的关联后,新增$match阶段,用$or组合两个判断条件:

    • 直接匹配当前templatefolders的name字段值
    • 通过$map遍历关联得到的joinFolder数组,用$anyElementTrue判断是否存在name为'test1'的文件夹
  2. 过滤无效dashboard文档:
    最后新增$match阶段,通过判断joinDashboard数组长度大于0,确保只保留关联到符合条件templatefolders的dashboard。

结果验证

针对给定的测试数据集,执行查询后会返回dashboard1文档:

  • 第一个关联的templatefolders满足name='folder'的条件
  • 第二个关联的templatefolders对应的folders.name='test1',满足第二个条件

内容的提问来源于stack exchange,提问作者Mark_STUF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:20:28