2017-08-16 1 views
0

J'ai un certain JSON dans un champ dans mon Postgres 9.4 db et je veux trouver des lignes où le nom donné est une certaine valeur, où le champ est nommé model et la structure JSON est la suivante:Interrogation d'un tableau dans un tableau avec requête Postgres JSONB

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

J'ai donc essayé ceci: SELECT * FROM current WHERE model->'name' @> '{"given":["JOHN"]}'; (ainsi que d'autres hypothèses) mais qui ne correspondent pas aux données ci-dessus. Comment dois-je faire cela?

Répondre

2

Utilisez la fonction jsonb_array_elements():

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

J'étais très excité, mais: « ne peut pas extraire des éléments d'un objet ». –

+0

Cela signifie que la structure réelle de JSON est différente de celle décrite dans votre question. L'objet 'name' doit être un tableau dans chaque ligne. Vous pouvez [tester ici.] (Http://rextester.com/JDHIC62950) – klin

+0

Ah! J'ai oublié de limiter la requête par resourceType. Merci - ça fonctionne. –