2017-08-16 100 views
0

我在Postgres 9.4 db的字段中有一些JSON,我想查找給定名稱是特定值的行,其中字段名爲model,JSON結構如下:使用Postgres JSONB查詢查詢數組中的數組

{ 
    "resourceType": "Person", 
    "id": "8a7b72b1-49ec-43e5-bd21-bc62674d9875", 
    "name": [ 
     { 
     "family": [ 
      "NEWMAN" 
     ], 
     "given": [ 
      "JOHN" 
     ] 
     } 
    ] 
} 

所以,我想這一點:SELECT * FROM current WHERE model->'name' @> '{"given":["JOHN"]}';(以及各種其他的猜測),但不符合以上的數據。我應該怎麼做?

回答

2

使用功能jsonb_array_elements():

select t.* 
from current t, 
jsonb_array_elements(model->'name') names 
where names->'given' ? 'JOHN' 
+0

我很興奮,但:「不能提取對象的元素」。 –

+0

這意味着實際的json結構與您的問題中描述的不同。 'name'對象必須是每一行中的一個數組。你可以[在這裏測試](http://rextester.com/JDHIC62950) – klin

+0

啊!我忘了限制資源類型的查詢。謝謝 - 它的作品。 –