如何将PostgreSQL后缀匹配查询转换为MongoDB查询?
PostgreSQL查询转MongoDB实现方案
需求回顾
原PostgreSQL查询用于找出固定字符串'545454129898'以identity字段值结尾的记录:
select * from sample where '545454129898' like '%' || identity ;
推荐实现方式:$expr + $regexMatch
MongoDB中可通过聚合表达式动态构建匹配规则,性能优于JavaScript脚本方式:
db.sample.find({ $expr: { $regexMatch: { input: "545454129898", regex: { $concat: ["$identity", "$"] }, options: "i" -- 可选,不需要忽略大小写可删除此参数 } } })
逻辑说明
$expr:允许在查询条件中使用聚合表达式,支持引用字段值构建匹配规则$regexMatch:执行正则匹配,input指定待检查的固定字符串,regex通过$concat将identity字段值与正则元字符$(表示字符串结尾)拼接,实现"以字段值结尾"的判断
备选实现方式:$where(不推荐)
如果需要更贴近SQL的语法风格,可使用$where执行JavaScript判断,但此方式会逐文档执行代码,大数据量场景下性能较差:
db.sample.find({ $where: function() { return "545454129898".endsWith(this.identity); } })
查询结果
两种方式都会返回符合条件的文档:
[ { _id: ObjectId("654d5e00b560e4fd57bde48a"), identity: '9898' }, { _id: ObjectId("654d5e0cb560e4fd57bde48b"), identity: '129898' } ]
内容的提问来源于stack exchange,提问作者mah454
相关产品推荐
相关产品推荐

