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

MongoDB中如何实现对象合并,将t_f_t字段内容合并至data对象

MongoDB 动态键合并操作实现方案

适用版本

MongoDB 4.2 及以上版本

直接更新文档(修改存储数据)

使用带聚合管道的updateMany操作,直接将合并后的结果写入文档,代码如下:

db.yourCollectionName.updateMany(
  // 匹配条件,可按需修改,此处为匹配所有文档
  {},
  [
    {
      $set: {
        data: {
          $mergeObjects: [
            // 保留原data字段的所有键值对
            "$data",
            // 生成 t_f 对应的键值对
            { $arrayToObject: [[ { k: "$t_f_t.t_f", v: "$t_f_t.v" } ]] },
            // 生成 t_t 对应的键值对
            { $arrayToObject: [[ { k: "$t_f_t.t_t", v: "$t_f_t.v" } ]] }
          ]
        }
      }
    },
    // 可选:删除已不需要的t_f_t字段,无需删除可注释此行
    { $unset: "t_f_t" }
  ]
)

查询时实时转换(不修改存储数据)

如果只需要返回符合预期的结果,不修改原始存储的文档,使用聚合查询即可:

db.yourCollectionName.aggregate([
  {
    $addFields: {
      data: {
        $mergeObjects: [
          "$data",
          { $arrayToObject: [[ { k: "$t_f_t.t_f", v: "$t_f_t.v" } ]] },
          { $arrayToObject: [[ { k: "$t_f_t.t_t", v: "$t_f_t.v" } ]] }
        ]
      }
    }
  },
  // 可选:返回结果中隐藏t_f_t字段
  { $project: { t_f_t: 0 } }
])

核心操作符说明

  • $arrayToObject:将包含k(键名)、v(键值)结构的数组转换为对象,实现动态使用t_f、t_t的取值作为键的需求
  • $mergeObjects:合并多个对象,存在重复键时后定义的对象值会覆盖前面对象的同键值,符合常规合并逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:01