MongoDB 6中如何用$lookup处理大小写敏感的关联字段
MongoDB 6 实现忽略大小写的 $lookup 左外连接
针对你遇到的本地字段小写、关联字段大写的匹配问题,MongoDB 6 可以通过带自定义管道的 $lookup 实现统一大小写后的关联,具体代码如下:
db.mycollection.aggregate([ { $lookup: { from: 'mycollection', // 若关联的是另一个集合,请替换为对应集合名 let: { local_symbol_lower: { $toLower: '$symbol' } }, // 将当前集合的symbol转为小写存为变量 pipeline: [ { $match: { $expr: { // 将关联集合的index_id转为小写,和本地变量做相等匹配 $eq: [ { $toLower: '$index_id' }, '$$local_symbol_lower' ] } } } ], as: 'foo' } } ]);
关键说明
let用于定义本地变量,把当前文档的symbol字段统一转为小写,后续用$$变量名引用pipeline是关联集合要执行的聚合操作,这里通过$match+$expr实现动态字段转换后的匹配- 这种写法保留了
$lookup默认的左外连接特性,即使没有匹配到关联文档,foo字段也会返回空数组
额外提示
- 如果需要转大写匹配,把所有
$toLower替换成$toUpper即可 - 若要优化查询性能,可以给关联集合创建表达式索引:
db.关联集合名.createIndex( { $toLower: "$index_id" } )
内容的提问来源于stack exchange,提问作者Java wanna bee
相关产品推荐
相关产品推荐

