MongoDB lookup聚合使用pipeline返回空数组如何解决
问题原因
cart是数组类型字段,通过$cart.product_id取到的$$pid是所有商品ID组成的数组,你使用$eq匹配单值_id和数组自然无法得到匹配结果。原生带localField/foreignField的$lookup会自动处理数组的包含匹配逻辑,但带pipeline的版本需要手动实现该逻辑。
修正方案
把$eq替换为$in运算符即可,修改后的查询语句如下:
{ from: 'collectionB', let: {pid: '$cart.product_id'}, pipeline: [ { $match: { $expr: { $in: ['$_id', '$$pid'] } } } // 此处可继续添加其他聚合阶段,实现更复杂的关联过滤逻辑 ], as: 'product_detail' }
内容的提问来源于stack exchange,提问作者Minh Hoang
相关产品推荐
相关产品推荐

