如何在Rails 5 / Postgres中查询缺少键/值对的jsonb数组哈希元素

时间:2017-09-19 22:10:15

标签: arrays postgresql hash ruby-on-rails-5 jsonb

我的Rails 5应用中的类(jsonb)上有一个array_attr数组属性(Klass)。该数组是一个哈希数组。一些哈希包含其他人没有的密钥。例如,一个哈希数组可能

[{'key1': 'val1'}]

和另一个

[{'key1': 'val1', 'key2': 'val2'}]

我想执行一个查询,该查询返回Klassarray_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中使它工作。

1 个答案:

答案 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)

我无法说明此解决方案的效果,但它可以获得正确的结果。就我的目的而言,这是处理一些数据迁移事物的一次性查询。它不会经常运行。