MongoDB聚合如何提取内嵌数组值直接返回根层级单一数组
调整后的聚合管道
你只需要在原有管道的基础上新增2个阶段即可,不需要额外的JS处理:
ActiveFixture.aggregate([ {$match:{fixture:{$in:fixtureIds}}}, {$project:{"predictions":1, _id:0}}, {$unwind:"$predictions"}, {$group:{_id:null, "Predictions":{"$push":"$predictions"}}}, // 新增以下两个阶段 {$unwind: "$Predictions"}, {$replaceWith: "$Predictions"} ]).exec()
补充说明
- 把
$group的_id设为null即可,不需要额外指定固定字符串,功能完全一致 - 新增的第一个
$unwind阶段:将分组后合并完成的Predictions数组拆分为多条单值文档 - 新增的
$replaceWith阶段:直接将文档根替换为Predictions字段的取值,最终聚合返回的结果就是你需要的纯字符串数组 - 如果需要对结果去重,只需要把
$group阶段的$push改为$addToSet即可 - 如果你的MongoDB版本低于4.2不支持
$replaceWith,可以用等价的$replaceRoot写法替换最后一个阶段:{$replaceRoot: { newRoot: "$Predictions" }}
内容的提问来源于stack exchange,提问作者Red Hood
相关产品推荐
相关产品推荐

