MongoDB中将嵌套数组转换为单行语句的实现问询
MongoDB嵌套数组按角色合并Permission实现方案
核心需求
将集合中嵌套的MainArray.SubArray数组,按相同角色编码合并对应的Permission列,输出格式为"Test": [角色编码] , [合并后的权限列表]。
实现代码(MongoDB聚合管道)
db.yourCollectionName.aggregate([ // 展开外层MainArray数组 { $unwind: "$MainArray" }, // 展开内层SubArray数组 { $unwind: "$MainArray.SubArray" }, // 按角色编码分组,合并Permission { $group: { _id: "$MainArray.SubArray.角色编码字段名", // 替换为实际的角色编码列名 mergedPermissions: { $push: "$MainArray.SubArray.Permission" } // 收集同角色的所有Permission } }, // 格式化输出为指定格式 { $project: { _id: 0, Test: { $concat: [ { $toString: "$_id" }, " , ", { $join: ["$mergedPermissions", ", "] } // 合并权限为逗号分隔的字符串 ] } } } ])
代码说明
$unwind:逐层展开嵌套数组,将数组元素转为单独的文档条目,方便后续分组操作。$group:以角色编码为分组键,用$push收集同一角色下的所有Permission值。$project:将分组结果格式化为需求的Test字段,用$concat和$join拼接成指定字符串格式。
注意事项
- 替换代码中的
yourCollectionName为实际集合名称。 - 替换
角色编码字段名和Permission为表中对应的实际列名。 - 如果需要保留原始文档的其他字段,可以在
$group阶段添加$first或$push来保留。
内容的提问来源于stack exchange,提问作者John Kenneth Dimarillas Siva
相关产品推荐
相关产品推荐

