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
相关产品推荐
相关产品推荐

