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

使用MongoDB聚合框架实现跨集合条件过滤文档并按规则排序

MongoDB聚合实现方案

你可以直接在collectionA上执行如下聚合查询,将代码中的<目标用户ID>替换为你要查询的具体userID即可:

db.collectiona.aggregate([
  // 关联collectionB中匹配当前文档和目标用户的记录
  {
    $lookup: {
      from: "collectionb",
      let: { a_id: "$_id" },
      pipeline: [
        {
          $match: {
            $expr: { $eq: ["$collectionaID", "$$a_id"] },
            "data.userID": "<目标用户ID>"
          }
        },
        {
          $project: {
            data: {
              $first: {
                $filter: {
                  input: "$data",
                  cond: { $eq: ["$$this.userID", "<目标用户ID>"] }
                }
              }
            }
          }
        }
      ],
      as: "b_match"
    }
  },
  // 提取用户权限数据,计算文档是否符合保留规则
  {
    $addFields: {
      user_data: { $first: "$b_match.data" },
      should_keep: {
        $or: [
          { $eq: [{ $size: "$b_match" }, 0] },
          { $eq: ["$user_data.response", false] }
        ]
      }
    }
  },
  // 过滤掉不符合要求的文档
  { $match: { should_keep: true } },
  // 按visibility排序:无关联记录/visibility为false在前,true在后
  {
    $sort: {
      "user_data.visibility": 1
    }
  },
  // 仅返回collectionA的原始字段
  {
    $project: {
      _id: 1,
      title: 1
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:45:00