6

I have a metadata column of type jsonb.

I know how to check whether it contains a specific key:

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

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

I wonder, how would I check if there is baz key in obj.metadata['bar'] and, if I had, for deeper nested keys?

4

1 回答 1

15

Ok, just found a way:

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

if metadata has more nested json:

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

and I would want to see, if there's metadata['bar']['baz']['qux']:

Model.where("(metadata -> 'bar' -> 'baz' ->> 'qux') IS NOT NULL")
于 2016-09-20T13:49:05.180 回答