【问题标题】:How to query jsonb array of hash elements for missing key/value pair in Rails 5/Postgres如何在 Rails 5/Postgres 中查询 jsonb 散列元素数组以查找缺少的键/值对
【发布时间】:2017-09-19 22:10:14
【问题描述】:

我的 Rails 5 应用程序中的类 (Klass) 上有一个 jsonb 数组属性 (array_attr)。该数组是一个哈希数组。一些散列包含其他不包含的键。例如一个哈希数组可能

[{'key1': 'val1'}]

还有一个

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

我想执行一个查询,返回 Klass 的所有实例,这些实例在 array_attr 中没有任何元素并定义了 key2

类似:klasses = Klass.where("array_attr @> ?",[{"key2": nil}].to_json)


我也尝试在 Postgres 命令行中使用以下命令:

SELECT array_attr FROM klasses WHERE array_attr @> '[{"key2": null}]'

原始的 Postgres 查询作为答案也会很有帮助。我对它不是很流利,但如果我可以让它在命令行 Postgres 中工作,那么我就能让它在 Rails 中工作。

【问题讨论】:

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


    【解决方案1】:

    我必须使用 Postgres 的 jsonb_array_elements 方法创建一个原始 SQL 查询,并在 Klass 上使用 find_by_sql 方法。

    sql = "select * from klasses, LATERAL jsonb_array_elements(array_attr) object where object ? 'key2' = false"

    Klass.find_by_sql(sql)

    我无法谈论此解决方案的性能,但它得到了正确的结果。出于我的目的,这是用于处理一些数据迁移事情的一次性查询。它不会经常运行。

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多