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

MongoDB多集合引用关联查询:关联technicians、services、tags

解决MongoDB三集合关联查询问题

正确的聚合查询语句

db.technicians.aggregate([
  // 第一步:关联services集合,获取技师对应的服务
  {
    $lookup: {
      from: "services",
      localField: "services",
      foreignField: "_id",
      as: "myservices"
    }
  },
  // 展开服务数组(每个技师关联单个服务,展开后方便后续关联标签)
  { $unwind: "$myservices" },
  // 第二步:关联tags集合,通过服务的tagid获取对应标签
  {
    $lookup: {
      from: "tags",
      localField: "myservices.tagid",
      foreignField: "_id",
      as: "mytags"
    }
  },
  // 展开标签数组(每个服务关联单个标签)
  { $unwind: "$mytags" },
  // 投影仅保留需要的字段,对应SQL的select逻辑
  {
    $project: {
      _id: 0,
      "technician_name": "$name",
      "service_name": "$myservices.name",
      "tag_name": "$mytags.name"
    }
  }
])

关键修正说明

  • 拆分聚合阶段:每个$lookup必须作为独立的聚合阶段,不能合并在同一个对象中。
  • 修正关联字段:第二个$lookup的localField需指向第一个关联得到的myservices.tagid,而非直接写tagid;foreignField是tags集合的_id,不是tags._id。
  • 展开数组结果:$lookup返回的是数组类型数据,用$unwind展开为单个文档,确保后续关联和字段提取的准确性。
  • 精准筛选字段:通过$project过滤出需要的字段,还可以重命名为更直观的名称,完全对应SQL的查询结果结构。

示例返回结果

当数据关联关系匹配时,会输出类似如下结构的文档:

{
  "technician_name": "John",
  "service_name": "plumber",
  "tag_name": "motor"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:14