使用Postgres JSONB查询查询数组中的数组

问题描述:

我在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"]}';(以及各种其他的猜测),但不符合以上的数据。我应该怎么做?

使用功能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

啊!我忘了限制资源类型的查询。谢谢 - 它的作品。 –