2014-09-12 2 views
1

내가 PG 9.3 사용하고 있다고 가정하고 내가 JSON 열 'meta_data'과 게시물 테이블이 있습니다 json으로 열 'meta_data'PostgreSQL의 선택은

{ 
    "content": "this is a post body", 
    "comments": [ 
    { 
     "user_id": 1, 
     "content": "hello" 
    }, 
    { 
     "user_id": 2, 
     "content": "foo" 
    }, 
    { 
     "user_id": 3, 
     "content": "bar" 
    } 
    ] 
} 

어떻게의

예 컨텐츠를 meta_data 열의 comments 배열에서 user_id = 1 인 모든 게시물을 찾았습니까?

+3

내게는 전통적 관계형 모델링에 더 적합 할 것으로 보인다. Pg에서 제한된 json 지원이 json을 사용해야한다는 의미는 아닙니다. –

+0

이 예제는 문제의 단순화 된 버전에 지나지 않습니다. 사실 JSON은 훨씬 더 복잡합니다 – Bill

+0

당신은 plv8 확장자를 추가 할 수 있습니까? – Lucas

답변

1

은 내가 잘못이 구현하지만, 중첩 된 SELECT 문에 대한 필요성을 제거합니다 @> 같은 배열 운영자가 거기에 아마이

select * 
from posts 
where id in (
    select id from (
     select id, 
      json_array_elements(meta_data->'comments')->'user_id' as user_id 
     from posts 
    ) x 
    where cast(user_id as varchar) = '1' 
); 

을 시도하지만 얻이 수없는 것있어 거의 확실 해요 지금 당장은 작동합니다.

이것이 올바른 트랙으로 추락하면 알려주세요. 필요한 경우 알아낼 수있을 것입니다.