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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:30:01