首页 > 解决方案 > postgres如何比较jsonb数组和数组

问题描述

这是我的 JONB 数据

contact:{
    "name": "Jonh",
    "country": ["USA", "UK"],
  }

我的查询:

SELECT * FROM public.product where contact -> 'country' = ARRAY['USA','UK'];

执行了查询并得到了这个ERROR: operator does not exist: jsonb = text[] 那么我该如何解决这个错误呢?

标签: postgresql

解决方案


您需要将其与 JSONB 数组进行比较:

select *
from product
where contact -> 'country' = '["USA","UK"]'::jsonb;

但这取决于数组中元素的顺序。如果您想测试所有键而不考虑顺序,则?&操作员可能会更好:

where contact -> 'country' ?& array['UK','USA']

但是,这也会返回包含数组中其他元素的行。如果您需要完全匹配所有元素而不管顺序如何,您可以使用该@>运算符两次:

where contact -> 'country' @> '["USA","UK"]'::jsonb
  and contact -> 'country' <@ '["USA","UK"]'::jsonb

推荐阅读