2016-09-28 2 views
5

저는 포스트그레스 jsonb 열 유형을 실험하고 있습니다. 내가 사용 하나의 일반적인 쿼리는 다음과 같다 :Postgres jsonb 'NOT contains'연산자

select count(*) from jsonbtest WHERE attributes @> '{"City":"Mesa"}'; 

어떻게 그 역합니까? 다른 운영자가 있습니까? 또는 단순히 사용 하시겠습니까?

select count(*) from jsonbtest WHERE NOT attributes @> '{"City":"Mesa"}'; 
+3

아니, 전용 운영자가 거기에 없다. 'NOT '이 뭐가 잘못 됐어? – redneb

+0

@redneb 문제는 간단히 작동하지 않는다는 것입니다. 'attributes - >> 'City'<> 'Mesa '' 공식을 사용하는 것도 효과가 없습니다. – eykanal

+0

@eykanal'NOT' [잘 작동] (http://rextester.com/TMGVQZ95259). – pozs

답변

1

이것은 여러 조건을 통해 얻을 수 있습니다. 우아한 것은 아니지만 다른 방법을 찾지 못했습니다.

먼저 'City'속성이없는 모든 행을 가져온 다음 'OR'조건을 추가하여 올바른 필드 값을 확인하십시오.

select count(*) from jsonbtest where 
    NOT(attributes ? 'City') 
    OR (attributes ? 'City') is NULL -- this is required if attributes can be null 
    OR (attributes->>'City' != 'Mesa')) 
0

당신은 '도시'가 아닌 곳에서 검색하면, 동작 <@를 사용할 수있는 '메사'

select count(*) from jsonbtest WHERE attributes <@ '{"City":"Mesa"}';