如何将MongoDB文档中的主分类与子分类合并为一个数组?
MongoDB合并主分类与子分类为单个数组
当前文档结构
{ "title": "main title", "subCategories": [ { "title": "sub title 1" }, { "title": "sub main title 2" }, { "title": "sub main title 3" } ] }
期望结果
[ { "title": "main title" }, { "title": "sub title 1" }, { "title": "sub main title 2" }, { "title": "sub main title 3" } ]
实现方法
通过MongoDB聚合管道即可完成,核心利用$concatArrays操作符将主分类包装为单元素数组后,与子分类数组合并。
方法1:返回包含合并数组的文档
执行以下聚合查询(替换yourCollectionName为实际集合名):
db.yourCollectionName.aggregate([ { $project: { mergedCategories: { $concatArrays: [ [ { title: "$title" } ], // 将主标题转为单元素数组 "$subCategories" // 拼接子分类数组 ] }, _id: 0 // 排除默认_id字段 } } ])
查询结果会返回一个包含mergedCategories字段的文档,其值即为合并后的目标数组。
方法2:返回独立的分类文档列表
如果希望直接得到每个分类对象作为独立文档的形式(与期望结果结构一致),可在上述基础上增加两个聚合阶段:
db.yourCollectionName.aggregate([ { $project: { mergedCategories: { $concatArrays: [ [ { title: "$title" } ], "$subCategories" ] }, _id: 0 } }, { $unwind: "$mergedCategories" }, // 将数组拆分为单个文档 { $replaceRoot: { newRoot: "$mergedCategories" } } // 将分类对象作为文档根 ])
执行后会返回4个独立文档,每个文档对应一个主分类或子分类的对象。
内容的提问来源于stack exchange,提问作者Reno
相关产品推荐
相关产品推荐

