繁体   English   中英

如何过滤包含多个元素中的任何一个的 JSON 数组

[英]How to filter a JSON array containing any of multiple elements

这是示例表:

create table leadtime.test (
    id serial primary key,
    name jsonb
)

数据测试:

insert into leadtime.test (name)
values ('["abc", "def", "ghi"]');

我想检查 name 是否包含此数组 '["abc", "132", "456"]' 中的任何值

我必须执行此代码:

select * from leadtime.test
where (name ? 'abc') or (name ? '132') or (name ? '456');

有人告诉我,多个OR 'ed 过滤器或不是最佳性能。
有没有更好的办法?

将您的搜索词数组作为实际的 Postgres 数组传递并使用|? 运营商

SELECT *
FROM   test
WHERE  name ?| '{abc, def, ghi}';

手册:

jsonb ?| text[] → boolean

文本数组中的任何字符串是否作为顶级键或数组元素存在?

也可以通过(name)上的普通GIN 索引来支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM