MongoDB聚合中如何遍历集合生成指定字段值
MongoDB聚合遍历数组生成单条记录实现方案
可以实现,核心是通过$unwind阶段拆解数组字段,再通过投影调整输出结构即可,不需要额外写脚本遍历返回结果,全流程可以在聚合管道内完成。
具体修改方式
你当前missing子管道执行到$project阶段时,输出的missing_woo是数组类型,只需要在该阶段后追加2个聚合阶段即可:
- 追加
$unwind阶段:遍历missing_woo数组,为数组内的每个元素生成一条独立文档,此时文档内的missing_woo会从数组转为对应单值 - 追加
$project阶段:移除多余的_id字段,只保留missing_woo字段,匹配你需要的输出格式
修正后的完整$facet配置
注意:原代码中$setDifference的第一个参数woo_set如果是文档字段引用,需要加$前缀;如果是外部传入的固定数组常量,直接传入常量值即可。
'missing': [ {'$group': {'_id': '$foo', 'woo': {'$addToSet': '$wwo'}}}, {'$project': {'missing_woo': {'$setDifference': ['$woo_set', '$woo']}}}, // 新增阶段开始 {'$unwind': '$missing_woo'}, {'$project': {'_id': 0, 'missing_woo': 1}} // 新增阶段结束 ]
输出效果
执行后missing数组内的结果会完全匹配你预期的格式:
[ {'missing_woo': 'missing_woo1'}, {'missing_woo': 'missing_woo2'}, ... {'missing_woo': 'missing_wooN'} ]
补充说明:如果
$setDifference计算出的missing_woo是空数组,$unwind默认会丢弃这条文档,不会生成空记录;如果需要保留空值场景,可以给$unwind加preserveNullAndEmptyArrays: true配置。
内容的提问来源于stack exchange,提问作者DefiBax
相关产品推荐
相关产品推荐

