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

MongoDB聚合拼接字段加前缀后lookup关联查询另一集合方法

MongoDB 跨集合关联聚合查询实现方案

完整实现代码

db.sites.aggregate([
  // 1. 过滤未访问的站点文档
  {
    $match: {
      hasVisited: false
    }
  },
  // 2. 关联webpages集合,自定义拼接匹配逻辑
  {
    $lookup: {
      from: "webpages",
      // 声明要用到的sites集合字段,供关联管道内引用
      let: { siteHost: "$host", sitePath: "$path" },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$url",
                // 拼接前缀+host+path构造完整匹配url
                { $concat: ["https://", "$$siteHost", "$$sitePath"] }
              ]
            }
          }
        }
      ],
      // 匹配结果存入的字段名
      as: "matchedPages"
    }
  }
])

逻辑说明

  • $match阶段:过滤sites集合中hasVisited为false的文档,对应原逻辑中的findOne查询条件
  • $lookup阶段:采用自定义管道的关联模式,规避默认关联不支持计算字段的限制:
    • 通过let声明当前sites文档中需要用到的host、path字段,在关联管道内以$$前缀引用
    • 用$concat运算符拼接固定前缀https://、站点host、站点path,和webpages的url字段做等值匹配
    • 所有匹配的网页文档会存入matchedPages数组字段

格式兼容处理

如果需要和原逻辑返回格式完全一致(直接得到网页文档数组),可以在聚合管道末尾追加两个阶段:

{ $unwind: "$matchedPages" },
{ $replaceRoot: { newRoot: "$matchedPages" } }

内容的提问来源于stack exchange,提问作者Mix Master Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:48:01