2016-11-08 2 views
0

나는 테이블 필드 jsonb 유형을 가지고 있으며 아래에 데이터가 있습니다.postgresql json 배열 필드에서 데이터를 가져 오는 방법

{"roles": ["7", "73", "163"]} 

"73"이 postgresql에 있는지 여부를 확인해야합니다.

이미 검색했지만 배열 객체가 아닌 객체의 객체 만 솔루션을 제공합니다.

나는 정확한 값을

{ "역할"가 해당 기록을 필요로 내가 쿼리 아래 시도했지만이

SELECT * 
FROM table 
WHERE field->'roles' ? ARRAY ['73']; 
또한

--updated--

작동하지 않습니다 : "7"]}

{ "롤"

: "7", "73", "163"]}

즉 필드 만이 " 7 "그 안에는 아무것도 없습니다. 모든 경우에 대한 설명서 https://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE으로

+0

왜 :

SELECT * FROM table WHERE field -> 'roles' ?& ARRAY[ '7', '163' ] ; 

오른쪽 JSON 배열을 JSON 배열 일치 -exactly- 왼쪽 않는다 'ARRAY [ '73']'을 사용합니까? 쿼리는'WHERE field -> 'roles'만으로도 잘 작동합니까? '73' '. – Marth

+1

@Marth : 고맙습니다. 반나절 동안 인터넷 검색 및 스택 오버플로 검색을 수행했지만 잠시 후에 제공합니다. – Sandeep

+0

@Marth : 또한 정확한 배열을 찾아야합니다. 그 이유가 ARRAY ['73 ']를 사용하고 있지만 작동하지 않습니다. ( – Sandeep

답변

1

: 권리 JSON 배열에 존재에

SELECT * 
FROM table 
WHERE field -> 'roles' ? '73'; 

가 키 -any-을 수행

는 -single- 키를 JSON 배열에 존재 하는가 :

SELECT * 
FROM table 
WHERE field -> 'roles' ?| ARRAY[ '7', '163' ] ; 

는 -all-합니까 오른쪽에있는 키의 왼쪽 JSON 배열에 존재 :

SELECT * 
FROM table 
WHERE field -> 'roles' = $$[ "7" ]$$::jsonb ; 

희망이 도움이 :)

+0

고마워요. 제게 많은 도움이됩니다. :) – Sandeep

관련 문제