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

如何将集合中多字符串字段拆分转换为单字段独立文档

拆分集合文档的u1/u2字段为独立的user文档

原集合结构

[
  { u1: 'xx', u2: 'gg' },
  { u1: 'yy', u2: 'Nk' },
  { u1: 'zz', u2: 'hh' },
  { u1: 'ya', u2: 'hj' },
  { u1: 'ab', u2: 'jd' },
]

目标结构

[
  {user: 'xx'},
  {user: 'gg'},
  {user: 'yy'},
  {user: 'Nk'},
  {user: 'zz'},
  {user: 'hh'},
  {user: 'ya'},
  {user: 'hj'},
  {user: 'ab'},
  {user: 'jd'},
]

方案一:MongoDB聚合管道实现

如果是在MongoDB中处理集合数据,可通过聚合管道完成转换:

db.collection.aggregate([
  // 将u1、u2值组合为数组
  {
    $project: {
      users: ['$u1', '$u2']
    }
  },
  // 拆分数组为独立文档
  {
    $unwind: '$users'
  },
  // 重命名字段为目标结构
  {
    $replaceRoot: {
      newRoot: { user: '$users' }
    }
  },
  // 可选:移除原文档的_id字段
  {
    $project: { _id: 0 }
  }
])

步骤说明

  • $project:把每个文档的u1、u2值打包成users数组,原文档转为{ _id: ObjectId(...), users: ['xx', 'gg'] }格式。
  • $unwind:将数组中的每个元素拆分为独立文档,此时每个文档为{ _id: ObjectId(...), users: 'xx' }。
  • $replaceRoot:将users字段的值作为新文档的user字段,替换根结构。
  • 可选的$project:移除原文档的_id,让结果完全匹配示例格式。

方案二:JavaScript数组处理

如果是在代码中处理内存中的数组数据,用flatMap可快速实现:

const originalData = [
  { u1: 'xx', u2: 'gg' },
  { u1: 'yy', u2: 'Nk' },
  { u1: 'zz', u2: 'hh' },
  { u1: 'ya', u2: 'hj' },
  { u1: 'ab', u2: 'jd' },
];

const result = originalData.flatMap(item => [
  { user: item.u1 },
  { user: item.u2 }
]);

console.log(result);

说明

flatMap遍历原数组的每个对象,返回包含两个user对象的子数组,同时自动将所有子数组合并为一个一维数组,直接得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:15:36