查询嵌套的jsonb Postgres列

时间:2016-09-20 13:44:38

标签: ruby-on-rails postgresql jsonb

我有一个metadatajsonb列。

我知道如何检查它是否包含特定密钥:

obj = Model.create
obj.metadata = {"foo"=>"1", "bar"=>{"baz"=>{"qux"=>2}}}

Model.where("(metadata->'bar') IS NOT NULL") # returns obj

我想知道,我如何检查baz中是否有obj.metadata['bar']密钥,如果有的话,我会检查更深层次的嵌套密钥?

1 个答案:

答案 0 :(得分:2)

好的,刚刚找到了一条路:

Model.where("(metadata -> 'bar' ->> 'baz') IS NOT NULL")

如果元数据有更多嵌套的json:

obj.metadata = {"foo"=>"1", "bar"=>{"baz"=>{"qux"=>2}}}

我希望看到there's metadata['bar']['baz']['qux']

Model.where("(metadata -> 'bar' -> 'baz' ->> 'qux') IS NOT NULL")