MongoDB 3.4.10如何合并字段并重构集合结构?
解决方案:MongoDB 3.4.10 集合字段重构
针对你的需求,在MongoDB 3.4.10里有两种简便的实现方式,你可以根据是否要修改原集合来选择:
方法1:直接更新原集合的所有文档
MongoDB 3.4开始支持在updateMany中使用聚合管道,我们可以用这个特性直接重构每个文档的结构:
db.yourCollection.updateMany( {}, // 匹配集合中所有文档 [ // 第一步:将所有需要的字段值合并为数组,覆盖原pass字段 { $addFields: { pass: [ "$pass", "$field4", "$field5", "$pass2", "$pass3" ] } }, // 第二步:只保留_id和pass字段,移除其他所有字段 { $project: { pass: 1 } } ] )
额外提示:
- 记得替换
yourCollection为你实际使用的集合名称 - 如果需要把数字类型的
field4、field5转为字符串(保持数组内类型统一),可以用$toString操作符修改数组定义:pass: [ "$pass", { $toString: "$field4" }, { $toString: "$field5" }, "$pass2", "$pass3" ]
方法2:生成新集合(不修改原数据)
如果你不想改动原集合,希望生成一个结构符合要求的新集合,可以用聚合管道配合$out操作符:
db.yourCollection.aggregate([ { $project: { pass: [ "$pass", "$field4", "$field5", "$pass2", "$pass3" ] } }, { $out: "newRefactoredCollection" // 新集合的名称 } ])
执行后,newRefactoredCollection就是你需要的仅包含_id和数组类型pass字段的集合,原集合数据完全不受影响。
内容的提问来源于stack exchange,提问作者user9240741
相关产品推荐
相关产品推荐

