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

MongoDB:将字符串数组与二维技能数组合并关联

MongoDB数组配对转换解决方案

刚好做过类似的数组索引配对转换需求,用MongoDB的聚合框架就能轻松实现你的需求,直接上可行的查询语句:

db.collection.aggregate([
  {
    $addFields: {
      skillsWithNames: {
        $map: {
          input: { $zip: { inputs: ["$names", "$skills"], useLongestLength: false } },
          as: "pair",
          in: {
            name: { $arrayElemAt: ["$$pair", 0] },
            skills: { $arrayElemAt: ["$$pair", 1] }
          }
        }
      }
    }
  }
])

关键步骤解释:

  • $zip 操作符:核心作用是把names和skills两个数组按索引一一配对,生成一个新的二维数组,每个元素都是[对应name, 对应skills数组]的组合。这里设置useLongestLength: false是为了只处理两个数组长度匹配的部分(如果两个数组长度不一致,超出的元素会被忽略,刚好符合你“索引一一对应”的要求)。
  • $map 操作符:遍历$zip生成的配对数组,把每个[name, skills]的对子转换成你需要的对象结构——用$$pair引用当前遍历的配对元素,再通过$arrayElemAt分别取出第一个元素(name)和第二个元素(skills数组),最终拼成{name: "...", skills: [...]}的对象。
  • $addFields 阶段:把生成的skillsWithNames字段添加到原文档中,如果你只想返回这个字段而不需要原文档的其他内容,可以追加一个$project阶段来筛选字段:
db.collection.aggregate([
  {
    $addFields: {
      skillsWithNames: {
        $map: {
          input: { $zip: { inputs: ["$names", "$skills"], useLongestLength: false } },
          as: "pair",
          in: {
            name: { $arrayElemAt: ["$$pair", 0] },
            skills: { $arrayElemAt: ["$$pair", 1] }
          }
        }
      }
    }
  },
  {
    $project: {
      skillsWithNames: 1,
      _id: 0 // 可选,如果你不需要返回默认的_id字段
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:42:08