如何在MongoDB中使用find或aggregate查询嵌套对象数组并关联员工详情
MongoDB关联查询实现方案
你需要使用aggregate聚合查询实现该需求,find语句无法完成跨集合关联操作,具体查询语句如下(假设你的员工集合名为employees,可根据实际名称替换):
db.company.aggregate([ // 拆分dutys数组为单条记录,方便逐一对每个岗位关联员工 { $unwind: "$dutys" }, // 关联员工集合,将emp_ids的id数组替换为完整员工详情 { $lookup: { from: "employees", localField: "dutys.emp_ids", foreignField: "_id", as: "dutys.emp_ids" } }, // 将拆分的dutys重新组合为数组,还原原有结构 { $group: { _id: "$_id", name: { $first: "$name" }, dutys: { $push: "$dutys" } // 若原文档还有其他顶层字段,可在此处按照 `字段名: {$first: "$字段名"}` 的格式补充 } } ])
逻辑说明
$unwind:将原文档中嵌套的dutys数组拆分,每个岗位对应一条独立的临时记录,避免后续关联时数组嵌套匹配出错$lookup:关联员工集合,MongoDB支持直接用数组类型的localField匹配foreignField,会自动返回所有匹配的员工文档组成的数组,直接覆盖原emp_ids字段即可$group:按原文档_id分组,把拆分的岗位记录重新合并为dutys数组,同时保留公司名称等原有顶层字段
内容的提问来源于stack exchange,提问作者Naisarg Parmar
相关产品推荐
相关产品推荐

