我有一张桌子
Visitor: (id, .., custom::jsonb[])
custom
是{field:string, value:string}
形式的JSON对象数组。例如:
{"field": "apps_created", "value": "3"}
说我想找到所有Visitors
有3个或更多apps_created
,我该如何解决这个问题?注意:每个Visitor
可以包含不同的字段,并且通常与其他访问者不重叠。
我曾尝试查阅postgres文档或其他stackoverflow问题,但我很难弄清楚在这种情况下使用了哪些函数/运算符。
非常感谢任何帮助
答案 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));