MongoDB match查询中使用substring操作符实现类SQL LEFT截取匹配
错误原因
你编写的聚合语句报错是因为$match 阶段不能直接将表达式运算符作为查询键使用,要在匹配阶段用字段计算结果做判断,需要搭配$expr运算符。
正确写法
方案1:修正后的聚合查询
db.inventory.aggregate( [ { $match: { $expr: { $eq: [ { $substrCP: ["$id", 0, 4] }, "1234" ] } } }, { $project: { id: 1, date: 1 } } ] )
注:如果id字段仅包含ASCII字符,使用$substr替代$substrCP也可正常运行;如果id是数字类型,需要先转成字符串再截取,将$substrCP的第一个参数替换为{ $toString: "$id" }即可。
方案2:更高效的普通查询(无需聚合)
你要实现的LEFT(id,4) = "1234"逻辑等价于匹配id以1234开头,直接用正则查询性能更好,id字段存在索引时还可以命中索引加速查询:
db.inventory.find( { id: /^1234/ }, { id: 1, date: 1 } )
内容的提问来源于stack exchange,提问作者Yohanes Lim
相关产品推荐
相关产品推荐

