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

MongoDB查询需求:拆分Links字段并生成新文档

解决方案:用MongoDB聚合拆分数组生成独立文档

嘿,作为MongoDB新手,你这个拆分数组生成独立文档的需求其实很常见,用MongoDB的聚合框架就能轻松搞定,核心用到$unwind操作符,下面一步步给你讲清楚:

先修正原始数据格式

首先注意你提供的JSON里混了中文引号(“/”),得改成英文引号才能被MongoDB正确解析,修正后的原始数据如下:

[
  {"id": "raymond_A", "name":"Raymond", "node_updated": 1, "company": "A", "token": 50, "time": 152232854211, "links": ["jason_C", "nick_D" ] },
  {"id": "nik_B", "name": "Nik", "node_updated": 1, "company": "B", "token": 40, "node_time": 1522328542551, "links": ["peter_E", "raymond_A"] }
]

执行聚合查询实现拆分

把下面的命令里的yourCollectionName替换成你实际的集合名称,运行后就能得到你想要的结构:

db.yourCollectionName.aggregate([
  // 核心步骤:拆分links数组,每个数组元素生成一个独立文档
  { $unwind: "$links" },
  // 可选:如果想让字段更清晰,可以重命名links字段,或者调整字段顺序
  {
    $project: {
      _id: 0, // 不需要默认的_id字段可以去掉这行
      id: 1,
      name: 1,
      node_updated: 1,
      company: 1,
      token: 1,
      time: 1,
      node_time: 1,
      linked_id: "$links" // 把原links字段重命名为更直观的linked_id
    }
  }
])

最终输出结果

执行完上面的命令后,你会得到这样的文档结构,每个links元素都对应一个独立文档:

[
  {"id": "raymond_A", "name":"Raymond", "node_updated": 1, "company": "A", "token": 50, "time": 152232854211, "linked_id": "jason_C"},
  {"id": "raymond_A", "name":"Raymond", "node_updated": 1, "company": "A", "token": 50, "time": 152232854211, "linked_id": "nick_D"},
  {"id": "nik_B", "name": "Nik", "node_updated": 1, "company": "B", "token": 40, "node_time": 1522328542551, "linked_id": "peter_E"},
  {"id": "nik_B", "name": "Nik", "node_updated": 1, "company": "B", "token": 40, "node_time": 1522328542551, "linked_id": "raymond_A"}
]

关键细节说明

  • $unwind是这个需求的核心操作符,它的作用就是把包含数组的单个文档拆分成多个文档,每个文档对应数组里的一个元素。
  • 如果不需要重命名字段,直接去掉$project阶段就行,结果里会保留原links字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:20