Postgres查询从具有Array of Objects类型的列的表中获取记录

时间:2017-11-29 10:13:15

标签: postgresql-9.4 jsonb

我有一个包含两个名为idcategoryArray的属性的表,其中id的类型为numbercategoryArrayjsonb[]列和架构如下所述:

"id": 1,
"categoryArray": [{
            "Field1": "A",
            "Field2": "A1"
        },
        {
            "Field1": "B",
            "Field2": "A2"
        },
        {
            "Field1": "C",
            "Field2": "A3"
        }
    ]

该表格将包含多个记录id,并且categoryArray内有对象。

我想在PostgreSQL中查询id Field1 = A对象categoryArray内的所有jsonb_array_elements

我尝试过使用Field1,但无法达到预期效果。

我们是否有可能根据categoryArray对象内的> list_dict=[{gene1:1, gene2:3, gene3:2}, {gene1:3, gene2:1, gene3:4}, > {gene1:2, gene1:1, gene2:1, gene3:3}] 进行查询。

1 个答案:

答案 0 :(得分:0)

由于您已经在使用jsonb[],因此您可以使用以下查询来使用下标生成函数Field1 = A来获取值为generate_subscripts()的记录。

select 
   * 
from 
   table 
where 
   id in 
   (
      select 
         id 
      from 
      (
         select 
            id,
            categoryArray, 
            generate_subscripts(categoryArray, 1) as s 
         FROM 
            table 
      ) as i
      where 
         categoryArray[s]->>'Field1' = 'A'
   );