如何使用MongoDB聚合将同分组的多个数组合并为单个平数组
问题原因
你当前的聚合语句得到的MergedTabs是[[1,2,3],[4,5,6]]的嵌套结构,原因是$push会把每个文档的完整tab数组作为单个元素存入结果数组,不会自动展开内部元素。
解决方案
方案1:先拆分数组再分组聚合(通用场景推荐)
db.collection.aggregate([ // 拆分每个文档的tab数组,将数组元素转为独立的单元素文档 { "$unwind": "$tab" }, // 按name分组,将所有拆分后的tab元素存入同一数组 { "$group": { "_id": "$name", "MergedTabs": { "$push": "$tab" } } }, // 调整输出字段格式 { "$project": { "_id": 0, "name": "$_id", "MergedTabs": 1 } } ])
如果需要对合并后的元素自动去重,把$push替换为$addToSet即可。
方案2:分组后扁平化嵌套数组(大数据量场景推荐,避免$unwind性能损耗)
db.collection.aggregate([ { "$group": { "_id": "$name", "nestedTabs": { "$push": "$tab" } } }, { "$project": { "_id": 0, "name": "$_id", "MergedTabs": { "$reduce": { "input": "$nestedTabs", "initialValue": [], "in": { "$concatArrays": ["$$value", "$$this"] } } } } } ])
内容的提问来源于stack exchange,提问作者HKHAIT
相关产品推荐
相关产品推荐

