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

MongoDB嵌套数据查询:获取具备Database Design经验的员工姓名

嵌套数组查询:获取具备「Database Design」经验的员工姓名

针对你的集合结构(Employee是顶层数组,每个员工的experience又是内部数组),直接用普通find或简单elemMatch会要么返回空、要么返回整个文档,以下两种方法可以精准获取目标信息:

方法一:使用聚合管道aggregate()

通过展开数组、筛选、投影三步实现,返回结果是每个符合条件的员工单独成文档,结构简洁:

db.empeProject.aggregate([
  // 把Employee数组拆成单个员工文档
  { $unwind: "$Employee" },
  // 筛选出experience包含"Database Design"的员工
  { $match: { "Employee.experience": "Database Design" } },
  // 只保留姓名字段,隐藏_id
  { $project: { _id: 0, "Employee.fName": 1, "Employee.lName": 1 } }
])

方法二:使用find()配合数组过滤投影

如果需要保留原文档的其他结构,同时过滤出目标员工,可以在投影里用$filter:

db.empeProject.find(
  // 先定位存在符合条件员工的文档
  { "Employee.experience": "Database Design" },
  // 投影时过滤Employee数组,只留下符合经验要求的员工
  {
    _id: 0,
    targetEmployees: {
      $filter: {
        input: "$Employee",
        cond: { $in: ["Database Design", "$$this.experience"] }
      }
    }
  }
).forEach(doc => {
  // 遍历输出姓名
  doc.targetEmployees.forEach(emp => {
    console.log(`姓名:${emp.fName} ${emp.lName}`);
  });
})

注意事项

  • $unwind会把原文档拆分成多个单员工文档,适合只需要提取目标员工信息的场景;
  • $filter在投影中操作,不会改变原文档的数量,适合需要保留原集合结构的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:10:27