2016-09-28 60 views
5

我正在試驗postgres jsonb列類型,迄今爲止很好。我使用 一個常見的查詢是這樣的:Postgres jsonb'不包含'運營商

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

如何扭轉?是否有不同的操作員,或者是否只是用作

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

沒有,沒有專門的運營商爲。 'NOT'有什麼問題? – redneb

+0

@redneb問題是「NOT」根本不起作用。使用'屬性 - >>'城市'<>'梅薩'制定也不起作用。 – 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"}';