我的Rails 5应用中的类(jsonb
)上有一个array_attr
数组属性(Klass
)。该数组是一个哈希数组。一些哈希包含其他人没有的密钥。例如,一个哈希数组可能
[{'key1': 'val1'}]
和另一个
[{'key1': 'val1', 'key2': 'val2'}]
我想执行一个查询,该查询返回Klass
中array_attr
中没有定义key2
的任何元素的klasses = Klass.where("array_attr @> ?",[{"key2": nil}].to_json)
个实例。
类似于:SELECT array_attr FROM klasses WHERE array_attr @> '[{"key2": null}]'
我还尝试在Postgres命令行中执行以下操作:
A little bit of text. LOAD-DATE: And some redundant text
作为答案的原始Postgres查询也会有所帮助。我不能流利,但如果我能在命令行Postgres中使用它,那么我就能在Rails中使它工作。
答案 0 :(得分:0)
我必须使用Postgres'创建一个原始的SQL查询。 jsonb_array_elements
方法并使用find_by_sql
上的Klass
方法。
sql = "select * from klasses, LATERAL jsonb_array_elements(array_attr) object where object ? 'key2' = false"
Klass.find_by_sql(sql)
我无法说明此解决方案的效果,但它可以获得正确的结果。就我的目的而言,这是处理一些数据迁移事物的一次性查询。它不会经常运行。