MongoDB聚合pipeline中$lookup双条件关联失效如何排查错误
错误原因
$lookup的let参数作用是声明**主集合(你当前执行聚合的products集合)**的字段别名,供关联的子pipeline使用。你在let中引用的$itemSku是关联集合order_history的字段,products集合不存在该字段,导致声明的$$foreign_sku变量实际为null。- 子pipeline是作用在
from指定的order_history集合上的,该集合不存在sku字段,只有对应关联字段itemSku,你匹配条件中写的$sku取值为空,两个空值匹配的条件相当于失效,最终返回所有order_history记录形成笛卡尔积。
正确实现代码
// 以下代码是在products集合的聚合管道中使用的$lookup阶段 $lookup: { from: 'order_history', // let声明主集合products的关联字段 let: { local_sku: "$sku", local_organizationId: "$organizationId" }, pipeline: [ { $match: { $expr: { $and: [ // 匹配order_history的organizationId和主集合的organizationId { $eq: ["$organizationId", "$$local_organizationId"] }, // 匹配order_history的itemSku和主集合的sku { $eq: ["$itemSku", "$$local_sku" ] } ] } } } ], as: 'order_history' }
内容的提问来源于stack exchange,提问作者Nikita Polevoy
相关产品推荐
相关产品推荐

