如何查询JSONB数组?

时间:2016-05-21 18:09:15

标签: postgresql

我有一张桌子

Visitor: (id, .., custom::jsonb[])

custom{field:string, value:string}形式的JSON对象数组。例如:

{"field": "apps_created", "value": "3"}

说我想找到所有Visitors有3个或更多apps_created,我该如何解决这个问题?注意:每个Visitor可以包含不同的字段,并且通常与其他访问者不重叠。

我曾尝试查阅postgres文档或其他stackoverflow问题,但我很难弄清楚在这种情况下使用了哪些函数/运算符。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

select *
from visitor
where
  exists (
    select 1 
    from unnest(custom) t(x) 
    where x->>'field' = 'apps_created' and (x->>'value')::int >= 3);

UPD
然而,在关系数据库中实现此类事物的经典方法是(原理图):

create table entity (
  entity_id serial not null primary key,
  ...);

create table param (
  param_id serial not null primary key,
  param_name varchar not null unique,
  ...);

create table param_value (
  param_id int references param(param_id),
  entity_id int references entity(entity_id) on delete cascade,
  value varchar,
  ...
  primary key (param_id, entity_id));