MongoDB带pipeline的$lookup关联集合返回空结果错误排查
MongoDB带pipeline的$lookup关联返回空的问题排查
你的写法存在三个核心错误:
let参数的取值逻辑错误:带pipeline的$lookup中,let定义的变量只能取**当前执行聚合的源集合(也就是你描述的第一个集合)**的字段,你写的$substitutions.masterProductId是第二个集合的字段,源集合没有该字段,导致$$foreignId值为空,无匹配结果。- 匹配逻辑写反:你原本的需求是用第一个集合的
_id,匹配第二个集合substitutions数组下的masterProductId,但你错误的用第二个集合的_id去匹配无效变量。 - 数组匹配规则错误:第二个集合的
substitutions是数组类型,直接用$eq无法匹配到数组内嵌套的字段值,需要使用数组匹配操作符。
正确写法示例
'$lookup': { 'from': 'secondCollection', 'let': { 'masterId': '$_id' // 声明变量存储源集合(第一个集合)的_id }, 'pipeline': [ { '$match': { '$expr': { '$in': [ '$$masterId', '$substitutions.masterProductId' // 匹配第二个集合的substitutions数组中存在对应masterProductId的文档 ] } } } ], 'as': 'secondCollection' }
内容的提问来源于stack exchange,提问作者Nikita Polevoy
相关产品推荐
相关产品推荐

