2014-09-01 1 views
0

В моей таблице у меня есть столбец JSon media, который установлен в массив (массив JSON), как это:Как найти все строки, в которых один из элементов jsonArray имеет свойство, равное чему-то?

media: [ 
    {}, 
    {}, 
    {}, 
    ..., 
    { key: 'thumbnail', metaData: { width: 123, height: 321 } } 
] 

Я должен найти все строки, которые содержат (в колонке СМИ) объект с key = 'thumbnail' AND metaData.width = 123 AND metaData.height = 321 свойствами.

Как я могу это сделать с помощью Postgres 9.3?

+0

перейдите на страницу http://stackoverflow.com/a/10560761/3682599 –

ответ

1
select id, a 
from (
    select id, json_array_elements((j ->> 'media')::json) as a 
    from (values(1, ' 
     {"media": [ 
      {}, 
      {}, 
      {}, 
      { "key": "thumbnail", "metaData": { "width": 123, "height": 321 } } 
     ]}'::json 
    )) s(id, j) 
) s 
where 
    a ->> 'key' = 'thumbnail' 
    and 
    (a #>> '{metaData, width}')::integer = 123 
    and 
    (a #>> '{metaData, height}')::integer = 321 
; 
id |         a         
----+--------------------------------------------------------------------- 
    1 | { "key": "thumbnail", "metaData": { "width": 123, "height": 321 } }