You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rails ActiveRecord实现Postgres jsonb列的LIKE模糊查询?

解决Postgres jsonb列的LIKE匹配问题

因为Postgres的jsonb类型无法直接使用LIKE运算符,你需要先将jsonb列转换为文本类型,再执行匹配操作。以下是几种可行的实现方式:

方式一:直接在SQL查询中转换类型

通过::text将jsonb列强制转换为文本,再使用LIKE匹配:

MyModel.where("a_jsonb_column::text LIKE ?", "%substring%").first

这种方式会把整个jsonb结构转为字符串形式(包括键的双引号、冒号等符号),所以能匹配到任意键或值中的子串。

方式二:使用Arel构建查询(更符合Rails风格)

用Rails的Arel API来生成类型转换的SQL,避免直接写原生SQL字符串:

jsonb_column = MyModel.arel_table[:a_jsonb_column]
MyModel.where(jsonb_column.cast(String).matches("%substring%")).first

cast(String)会自动生成::text的类型转换逻辑,matches方法对应SQL的LIKE运算符,这样的写法更安全且易于维护。

注意事项

  • 这种转换后的查询无法利用jsonb类型的索引,如果你的表数据量较大,查询性能可能会受影响。若需要优化,可以考虑创建基于text类型的表达式索引,或者使用Postgres的jsonb全文检索功能。
  • 匹配的是jsonb的字符串化结果,比如键名会带有双引号,所以搜索"%name%"会匹配到{"name": "Alice"}这样的条目。

内容的提问来源于stack exchange,提问作者John Skiles Skinner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:47:07