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

MongoDB技术需求:将MySQL迁移后的JSON字符串转为JSON数组/对象

MongoDB将JSON字符串字段转换为JSON数组/对象

场景说明

从MySQL迁移到MongoDB后,文档中的info字段存储为JSON格式的字符串,需要将其转换为JSON数组,同时把数组元素中的year字段从字符串类型转为整数类型。

解决方案

方法1:使用MongoDB 5.0+原生操作符(推荐)

利用$parseJSON解析JSON字符串,结合$map和$toInt完成类型转换,性能优于JS函数:

db.collection.updateMany(
  { info: { $type: "string" } }, // 仅匹配info为字符串的文档
  [
    {
      $set: {
        info: {
          $map: {
            input: { $parseJSON: "$info" },
            as: "item",
            in: {
              ..."$$item",
              year: { $toInt: "$$item.year" }
            }
          }
        }
      }
    }
  ]
)

方法2:使用$function(MongoDB 4.4+支持)

通过JS函数实现解析和类型转换,适合需要更复杂逻辑的场景:

db.collection.updateMany(
  { info: { $type: "string" } },
  [
    {
      $set: {
        info: {
          $function: {
            body: function(str) {
              try {
                const arr = JSON.parse(str);
                return arr.map(item => ({
                  ...item,
                  year: item.year ? parseInt(item.year, 10) : item.year
                }));
              } catch (e) {
                // 处理无效JSON,可根据需求返回原字符串或null
                return str;
              }
            },
            args: ["$info"],
            lang: "js"
          }
        }
      }
    }
  ]
)

注意事项

  • 执行更新前务必备份数据,避免操作失误导致数据丢失。
  • 如果存在无效JSON格式的info字段,需在逻辑中添加异常处理,防止更新失败。

内容的提问来源于stack exchange,提问作者Mr.Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59