我有一个具有JSONB列content
的Page
模型的Rails 5项目。因此,结构看起来像这样(降低到最低限度的问题):在Rails中的JSONB查询包含哈希数组的键
#<Page id: 46, content: {..., "media" => [{ "resource_id" => 143, "other_key" => "value", ...}, ...], ...}>
我将如何编写一个查询发现,有一些所需数量的resource_id
的content
JSONB的media
键下的所有网页柱?这是我做了一个不起作用的尝试(我认为是因为在阵列的每个项目中还有其他键/值对): Page.where("content -> 'media' @> ?", {resource_id: '143'}.to_json)
编辑:这个工作,但只会检查第一个哈希媒体数组:Page.where("content -> 'media' -> 0 ->> 'resource_id' = ?", '143')
谢谢,这是非常有帮助的。使用Rails而不是直接SQL,我编写了这个查询,它给了我所需要的: 'Page.where(“'{\”resource_id \“:?}'<@ ANY(ARRAY(select jsonb_array_elements(content - >) 'media')))“,143)' – Lee