ruby-on-rails ActiveRecord使用LIKE查询jsonb,就像它是一个字符串一样

hrysbysz  于 2023-04-13  发布在  Ruby
关注(0)|答案(1)|浏览(98)

我想写一个Rails ActiveRecord查询,它可以匹配带有SQL LIKE通配符的jsonb数据库列,就像它是一个字符串或文本字段一样。换句话说,我试图匹配jsonb中的一个子字符串,不管这个子字符串可能出现在什么键或值中。
尝试使用LIKE查询字符串的正常方法不起作用:

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

此尝试返回错误:

ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  operator does not exist: jsonb ~~ unknown
LINE 1: ...on_at" FROM "my_model" WHERE (a_jsonb_column LIKE '%subs...
                                                        ^

SQL LIKE似乎有问题,可能是因为它不适用于这种数据类型。也许我必须将jsonb转换为字符串?我不确定在ActiveRecord中执行此操作的最佳方法。我的数据库是Postgres 14.7通过自制程序。

djmepvbi

djmepvbi1#

ActiveRecord的功能之一是将应用程序代码与数据库细节隔离开来。但是,当不考虑数据库依赖性时,这样做可能是可以接受的。您可以使用a_jsonb_column::text将列转换为文本。请记住,substring 可能匹配但不存在于任何键或值中;例如'": "'

相关问题