如何将MongoDB中的JSON对象数据转换为目标数组结构
MongoDB 嵌套字段格式转换更新方法
直接使用MongoDB 4.2及以上版本支持的聚合管道更新即可完成结构转换,无需额外开发外层遍历脚本,具体操作如下:
- 转换规则对应实现逻辑
遍历designSectionContents数组的每个子节点,对其下的columns数组做重映射:将原数组中每个{"0": 业务对象}格式的元素,替换为[业务对象]的数组结构;同时可按需将字符串格式的_id转为ObjectId类型,丢弃目标结构不需要的冗余字段。 - 执行更新前务必备份目标集合数据,避免误操作导致数据丢失,确认备份完成后执行以下语句:
// 将your_collection替换为实际业务集合名 db.your_collection.updateMany( {}, // 此处可添加文档筛选条件,空对象默认匹配全集合文档 [ { $set: { designSectionContents: { $map: { input: "$designSectionContents", as: "sectionItem", in: { _id: { $toObjectId: "$$sectionItem._id" }, // 不需要转_id类型可直接赋值为"$$sectionItem._id" type: "$$sectionItem.type", columns: { $map: { input: "$$sectionItem.columns", as: "colItem", in: ["$$colItem.0"] // 取出键为0的业务对象,直接包裹为数组 } } } } } } } ] )
- 版本兼容说明
如果使用的MongoDB版本低于4.2,不支持在update中使用聚合管道,可以通过Mongo Shell逐文档遍历处理:查询出所有待更新文档后,在JS逻辑层重组为目标结构,再调用updateOne逐行写回即可,操作前同样需要先做数据备份。
内容的提问来源于stack exchange,提问作者Vedprakash Panda
相关产品推荐
相关产品推荐

