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
相关产品推荐
相关产品推荐

