MongoDB Lookup管道匹配字段与数组问题求助
解决MongoDB $lookup中$in表达式不生效的问题
问题场景
已从customers集合筛选出id为100的客户,需通过带let和pipeline的$lookup关联sales集合,匹配客户id出现在sales.persons_related.id中的销售记录,但当前$in表达式未生效,无法得到预期结果。
解决方案
调整$lookup子管道中$in表达式的参数顺序,确保匹配逻辑正确。完整聚合管道代码如下:
db.customers.aggregate([ { $match: { id: 100 } }, { $lookup: { from: "sales", let: { customerId: "$id" }, pipeline: [ { $match: { $expr: { // 调整$in的参数顺序:待匹配值在前,目标数组在后 $in: ["$$customerId", "$persons_related.id"] } } } ], as: "related_sales" } } ])
问题原因
$in的语法规则为$in: [ <待匹配值>, <目标数组> ],原代码中错误地将目标数组放在了第一个参数位置,导致匹配逻辑完全反转,无法找到符合条件的销售记录。调整参数顺序后,即可正确判断客户ID是否存在于sales.persons_related.id数组中。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

