MongoDB聚合查询问题:如何处理可选关联字段的匹配
解决MongoDB聚合查询中非必填关联字段的返回问题
你的问题出在$unwind阶段——默认情况下,$unwind会直接移除那些目标字段为空、不存在,或者对应数组为空的文档,所以当交易数据只存在dealer或delivery其中一个值时,就会被过滤掉,导致没有数据返回。
解决方法很简单:给每个$unwind添加preserveNullAndEmptyArrays: true参数,这个参数会让MongoDB保留那些目标字段为空、不存在或者数组为空的文档,确保无论dealer或delivery是否有值,数据都能正常返回。
修改后的聚合查询代码如下:
const aggregate = [ { $lookup: { from: 'deliveries', localField: 'delivery', foreignField: '_id', as: 'delivery', }, }, { $unwind: { path: "$delivery", preserveNullAndEmptyArrays: true // 保留空或不存在delivery字段的文档 }, }, { $lookup: { from: 'dealers', localField: 'dealer', foreignField: '_id', as: 'dealer', }, }, { $unwind: { path: '$dealer', preserveNullAndEmptyArrays: true // 保留空或不存在dealer字段的文档 } } ]
补充说明:$lookup在没有匹配到关联数据时会返回空数组,加上带参数的$unwind后,空数组会被展开为null,最终返回的文档里,dealer或delivery字段要么是关联的完整文档,要么是null,完全符合你“无论字段是否存在都正常返回”的需求。
内容的提问来源于stack exchange,提问作者Matin
相关产品推荐
相关产品推荐

