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

MongoDB中通过自连接从同集合获取关联员工数据

MongoDB自连接查询解决方案

实现查询的聚合管道语句

你可以通过MongoDB的聚合框架,使用$lookup完成自连接,提取所需字段。以下是两种可行的查询方式:

方式1:从关联记录(EmployeeID=002)出发

db.employee.aggregate([
  // 定位到关联主记录的那条文档(EmployeeRelationID=001)
  { $match: { EmployeeRelationID: "001" } },
  // 自连接关联主记录(EmployeeID匹配当前的EmployeeRelationID)
  {
    $lookup: {
      from: "employee",
      localField: "EmployeeRelationID",
      foreignField: "EmployeeID",
      as: "relatedEmployee"
    }
  },
  // 展开关联结果数组(仅一条匹配,展开为单个对象)
  { $unwind: "$relatedEmployee" },
  // 构造目标输出格式
  {
    $project: {
      _id: 0,
      Name: "$relatedEmployee.Name",
      Age: "$relatedEmployee.Age",
      Country: "$Country"
    }
  }
])

方式2:从主记录(EmployeeID=001)出发

db.employee.aggregate([
  // 定位到主记录(EmployeeID=001)
  { $match: { EmployeeID: "001" } },
  // 自连接关联到它的子记录(EmployeeRelationID匹配当前的EmployeeID)
  {
    $lookup: {
      from: "employee",
      localField: "EmployeeID",
      foreignField: "EmployeeRelationID",
      as: "relatedEmployee"
    }
  },
  // 展开关联结果数组
  { $unwind: "$relatedEmployee" },
  // 构造目标输出格式
  {
    $project: {
      _id: 0,
      Name: "$Name",
      Age: "$Age",
      Country: "$relatedEmployee.Country"
    }
  }
])

执行结果

两种方式都会输出符合要求的文档:

{ "Name" : "Gouse", "Age" : 27, "Country" : "India" }

关键步骤说明

  • $match:快速定位到起始文档,减少后续处理的数据量
  • $lookup:完成集合自连接,将关联的文档存入指定数组字段
  • $unwind:将关联结果数组展开为单个文档,方便后续字段提取
  • $project:重新构造输出结构,只保留需要的字段并去掉默认的_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:39:58