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

MongoDB聚合投影:将同索引data2.value合并至data数组

实现MongoDB数组按索引合并字段的方案

当然可以实现你想要的效果!因为数组长度不固定,硬编码索引肯定行不通,我们可以用MongoDB的聚合操作符来动态完成对应索引字段的合并。

具体聚合管道实现

这里会用到$zip和$map两个数组操作符,配合$mergeObjects来合并对象,直接看代码:

db.items.aggregate([
  {
    $project: {
      data: {
        $map: {
          input: { $zip: { inputs: ["$data", "$data2"] } },
          as: "pair",
          in: { $mergeObjects: ["$$pair.0", "$$pair.1"] }
        }
      },
      data2: 0 // 排除不需要的data2字段
    }
  }
])

代码分步解释

  • $zip 配对数组元素:$zip: { inputs: ["$data", "$data2"] }会把两个数组按索引位置一一配对,生成一个嵌套数组,比如你的示例数据会变成:
    [[{"name": "First"}, {"value": 20}], [{"name": "Second"}, {"value": 30}]]
    
  • $map 遍历配对元素:遍历每一组配对后的元素,把每一组命名为pair。
  • $mergeObjects 合并对象:$mergeObjects: ["$$pair.0", "$$pair.1"]会把每组里的第一个对象(来自data)和第二个对象(来自data2)合并成一个新对象,也就是把对应索引的value字段添加到data的文档里。

版本兼容性说明

$mergeObjects是MongoDB 3.6及以上版本支持的操作符,$zip从MongoDB 3.2开始就支持了,所以只要你的MongoDB版本在3.6以上,这个方案就能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:47:39