MongoDB聚合如何匹配同文档某字段值存在于对应数组中
问题原因
- 常规
$match的查询语法不支持引用同文档的其他字段值,你代码里写的'$this.myField'会被识别为普通字符串字面量,而非读取当前文档的myField字段取值进行匹配 - 聚合表达式中引用当前文档字段不需要加
this前缀,直接使用$字段名格式即可,你的字段引用写法本身也存在错误 $elemMatch在普通查询场景下仅支持和固定字面量做匹配,无法实现同文档字段的动态对比逻辑
正确实现方案
你可以直接使用$expr在$match阶段启用聚合表达式能力,配合$in操作符完成筛选,代码如下:
[ { $match: { $expr: { $in: ["$myField", "$myArray"] } } } ]
上述代码逻辑非常简洁,$in会直接判断myField的取值是否存在于myArray数组中,性能优于遍历数组类的实现方案,可直接嵌入你现有的聚合管道中使用。
内容的提问来源于stack exchange,提问作者jamiemcd
相关产品推荐
相关产品推荐

