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

