MongoDB聚合:如何将$set生成的[{}]替换为空数组?
解决方法
在生成buyer字段的$set阶段中,增加条件判断逻辑,当嵌套lookup返回的buyers为null或空数组时,直接返回空数组,否则再执行映射转换:
{ $set: { buyer: { $cond: { if: { $or: [{ $eq: ["$buyers", []] }, { $eq: ["$buyers", null] }] }, then: [], else: { $map: { input: "$buyers", as: "b", in: { name: "$$b.name", age: "$$b.age" } } } } } } }
原理是通过$cond结合$or判断buyers的状态:
- 若
buyers是空数组或null,直接输出空数组 - 若
buyers有有效数据,再用$map提取需要的字段
这样就能避免原本空状态下返回[{}]的问题,符合预期结果。
内容的提问来源于stack exchange,提问作者Epple
相关产品推荐
相关产品推荐

