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

MongoDB 3.4.3合并WorkProfile技能数组:解决数组嵌套问题

解决MongoDB聚合中JobSkills嵌套数组的问题

嘿,我明白你的困扰了——你现在得到的JobSkills是嵌套数组,原因很简单:WorkProfile本身就是一个数组,当你直接取$ResumeDetails.WorkProfile.JobSkills.CommonSkills时,MongoDB会返回每个WorkProfile条目里的CommonSkills数组,最后就变成了「数组的数组」。

要把它转成一维数组,你可以用MongoDB 3.4支持的$reduce操作符,遍历WorkProfile数组,逐个合并每个条目里的CommonSkills和OtherSkills,再把所有结果拼到一个数组里。

修改后的聚合查询

db.ResumeParsedData.aggregate([
  {$match: {'DocId': '51cb2f49-fcb9-46a0-9040-67e0f986be11'}},
  {$project: {
    'JobSkills': {
      $reduce: {
        input: '$ResumeDetails.WorkProfile',
        initialValue: [],
        in: {
          $concatArrays: [
            '$$value',
            { $concatArrays: ['$$this.JobSkills.CommonSkills', '$$this.JobSkills.OtherSkills'] }
          ]
        }
      }
    },
    'AdditionalSkills': {
      $setUnion: [
        '$ResumeDetails.AdditionalSkills.CommonSkills',
        '$ResumeDetails.AdditionalSkills.OtherSkills'
      ]
    }
  }}
]).pretty()

代码解释

  • $reduce遍历WorkProfile数组:
    • input指定要遍历的数组(就是你的WorkProfile)
    • initialValue设置初始累加器为空数组
    • in里的逻辑:先把当前WorkProfile条目里的CommonSkills和OtherSkills合并成一个数组,再把这个数组和累加器$$value里的内容合并,逐步构建出一维的技能数组
  • AdditionalSkills的逻辑不用改,因为它本身就不是嵌套在数组里的,$setUnion可以直接合并去重。

预期输出

你会得到一维的JobSkills数组,类似这样:

{
  "_id" : ObjectId("5ad5ab8aaf2808b739ba6ab2"),
  "JobSkills" : [
    ObjectId("5ad5ab860b94c96c738e914a"),
    ObjectId("5ad5ab860b94c96c738e9146")
  ],
  "AdditionalSkills" : [
    ObjectId("5ad5ab860b94c96c738e90e6"),
    ObjectId("5ad5ab860b94c96c738e9142"),
    ObjectId("5ad5ab860b94c96c738e9175"),
    ObjectId("5ad5ab860b94c96c738e919b"),
    ObjectId("5ad5ab860b94c96c738e91f0"),
    ObjectId("5ad5ab860b94c96c738e9211"),
    ObjectId("5ad5ab860b94c96c738e9241"),
    ObjectId("5ad5ab860b94c96c738e9293"),
    ObjectId("5ad5ab860b94c96c738e92c8")
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:23