MongoDB:如何将$facet聚合输出的结果两两合并?
实现方案
你可以在原有$facet阶段后新增一个$project阶段,使用$concatArrays操作符完成两两数组合并,完整聚合语句如下:
db.collection.aggregate([ { "$facet": { "1": [ { $match: { "ID": "2" } } ], "2": [ { $match: { "array.ID": "2" } } ], "3": [ { $match: { "array.ID": "4" } } ], "4": [ { $match: { "ID": "4" } } ] } }, { $project: { // 合并facet 1和2的结果为第一组 "1": { $concatArrays: ["$1", "$2"] }, // 合并facet 3和4的结果为第二组 "2": { $concatArrays: ["$3", "$4"] } } } ])
逻辑说明
$concatArrays可以安全拼接数组,即使其中某一个facet返回空数组也不会出错,完全符合你提到的「每组两个facet最多返回1条记录」的场景。- 如果后续facet数量增加,只要按序号两两配对,在
$project里新增对应的合并规则即可,比如facet 5和6合并为键"3",以此类推。
内容的提问来源于stack exchange,提问作者harryk
相关产品推荐
相关产品推荐

